<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Boriel Basic Forum - How-To & Tutorials]]></title>
		<link>https://forum.boriel.com/</link>
		<description><![CDATA[Boriel Basic Forum - https://forum.boriel.com]]></description>
		<pubDate>Sat, 16 May 2026 23:00:16 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[A Fast(er) Plot Routine for Boriel Basic]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2647</link>
			<pubDate>Tue, 28 Oct 2025 14:56:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2556">tubz74</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2647</guid>
			<description><![CDATA[I orginally posted this on SpectrumComputing Forum - copied here in case anyone wants to play with it :-)<br />
<br />
Hi<br />
<br />
Hope this helps someone else :-)<br />
<br />
I saw a post by Andy Dansby who writes at <a href="https://zxspectrumcoding.wordpress.com/" target="_blank" rel="noopener" class="mycode_url">https://zxspectrumcoding.wordpress.com/</a><br />
<br />
He has created a fast plot routine, (hellaplot), so I thought I'd try and convert it to a Boriel Basic (BB) subroutine, just for fun and learning - and as it was a single routine.<br />
<br />
I had to do a little bit of reading, but also had to ask for help from the BB telegram community, as to begin with the code was crashing the emulator. Turns out it was a simple fix when you know how - FASTCALL was needed when passing parameters for ASM to use from a SUB routine.<br />
<br />
Andy's code needs the x/y locations in DE, so I had to do a little bit to get them set up like this - I assume there might be some more efficiency if different registers were used as BB passes from the subroutine call, the first parameter into A, and the second parameter is the second item on the stack (the first being the return address).<br />
<br />
When I started, xPos was the first parameter, and yPos the second (as I like x,y), but this meant to get them into DE, took another load (POP DE, LD E with D, LD D with A, compared to POP DE, LD E with A)<br />
<br />
So some "non exact" timings - plot included as the library in BB takes about 15 seconds to fill up the screen with "points". Andy's one takes 5 seconds to do the same.<br />
<br />
As far as Andy's code goes, I understand the comments, but not exactly how it works :-)<br />
<br />
Anyway, code below :<br />
<br />
SUB FASTCALL HellaPrint(yPos as UBYTE, xPos as UBYTE)<br />
' HellaPrint prints an x,y pixel<br />
' 0,0 is top left<br />
' Original code by Andy Lansby<br />
' <a href="https://zxspectrumcoding.wordpress.com/" target="_blank" rel="noopener" class="mycode_url">https://zxspectrumcoding.wordpress.com/</a><br />
' yPos is first, as it save a LD instruction when putting xPos and yPos into DE<br />
ASM<br />
<br />
JP START ; Put this in as it's like this on the Wiki ASM desciption - can it be avoided?<br />
X_PositionBits: defb 128,64,32,16,8,4,2,1<br />
; Might there be a quicker way to do the above, so it's not needed every time the program is run? or does it not work like this and is created once at compile time?<br />
<br />
START: ; plot d = x-axis, e = y-axis<br />
; A contains the yPos, xPos is on stack.<br />
POP HL ; Pops the return address into HL<br />
POP DE ; xPos is on the stack, and it needs to be in D<br />
LD E, A ; A has our first paramter (yPos), load it into E. D should be Xpos, E should be yPos<br />
PUSH HL ; Puts the return address back onto stack ...<br />
; 166 T states per pixel<br />
XOR A ; reset A to 0 and flags to default<br />
LD A,E ; load Y plot point<br />
RRA ; rotate Right --- divide in half<br />
SCF ; turn on Carry flag-<br />
RRA ; rotate right with the carry flag<br />
OR A ; set flag S on - C flag off<br />
RRA ; rotate Right --- divide in half<br />
<br />
LD L,A ; temp store in L<br />
XOR E ; XOR the Y value<br />
AND %11111000 ; mask out bottom 3 bits<br />
XOR E ; XOR the Y value<br />
<br />
LD H,A ; store High byte<br />
LD A,D ; load X plot point<br />
XOR L ; XOR the temp value<br />
AND %00000111 ; mask out unwanted bits<br />
XOR D ; XOR the X value<br />
RRCA ; divide by 2<br />
RRCA ; divide by 4<br />
RRCA ; divide by 8<br />
<br />
LD L,A ; store Low byte<br />
; now we have the full address<br />
; now use LUT to find which bit to set<br />
LD A,D ; load X plot point<br />
AND %00000111 ; mask out unwanted bits<br />
<br />
; use a LUT to quickly find the bit position for the X position<br />
LD DE,X_PositionBits ; load LUT address into DE<br />
ADD A,E ; Add A to E to get offset into table<br />
LD E,A ; E now points to the LUT entry<br />
LD A,(DE) ; load answer into A<br />
<br />
; output to screen<br />
OR (HL) ; or with contents of address HL<br />
LD (HL),A ; load address HL with Answer from A<br />
END ASM<br />
END SUB]]></description>
			<content:encoded><![CDATA[I orginally posted this on SpectrumComputing Forum - copied here in case anyone wants to play with it :-)<br />
<br />
Hi<br />
<br />
Hope this helps someone else :-)<br />
<br />
I saw a post by Andy Dansby who writes at <a href="https://zxspectrumcoding.wordpress.com/" target="_blank" rel="noopener" class="mycode_url">https://zxspectrumcoding.wordpress.com/</a><br />
<br />
He has created a fast plot routine, (hellaplot), so I thought I'd try and convert it to a Boriel Basic (BB) subroutine, just for fun and learning - and as it was a single routine.<br />
<br />
I had to do a little bit of reading, but also had to ask for help from the BB telegram community, as to begin with the code was crashing the emulator. Turns out it was a simple fix when you know how - FASTCALL was needed when passing parameters for ASM to use from a SUB routine.<br />
<br />
Andy's code needs the x/y locations in DE, so I had to do a little bit to get them set up like this - I assume there might be some more efficiency if different registers were used as BB passes from the subroutine call, the first parameter into A, and the second parameter is the second item on the stack (the first being the return address).<br />
<br />
When I started, xPos was the first parameter, and yPos the second (as I like x,y), but this meant to get them into DE, took another load (POP DE, LD E with D, LD D with A, compared to POP DE, LD E with A)<br />
<br />
So some "non exact" timings - plot included as the library in BB takes about 15 seconds to fill up the screen with "points". Andy's one takes 5 seconds to do the same.<br />
<br />
As far as Andy's code goes, I understand the comments, but not exactly how it works :-)<br />
<br />
Anyway, code below :<br />
<br />
SUB FASTCALL HellaPrint(yPos as UBYTE, xPos as UBYTE)<br />
' HellaPrint prints an x,y pixel<br />
' 0,0 is top left<br />
' Original code by Andy Lansby<br />
' <a href="https://zxspectrumcoding.wordpress.com/" target="_blank" rel="noopener" class="mycode_url">https://zxspectrumcoding.wordpress.com/</a><br />
' yPos is first, as it save a LD instruction when putting xPos and yPos into DE<br />
ASM<br />
<br />
JP START ; Put this in as it's like this on the Wiki ASM desciption - can it be avoided?<br />
X_PositionBits: defb 128,64,32,16,8,4,2,1<br />
; Might there be a quicker way to do the above, so it's not needed every time the program is run? or does it not work like this and is created once at compile time?<br />
<br />
START: ; plot d = x-axis, e = y-axis<br />
; A contains the yPos, xPos is on stack.<br />
POP HL ; Pops the return address into HL<br />
POP DE ; xPos is on the stack, and it needs to be in D<br />
LD E, A ; A has our first paramter (yPos), load it into E. D should be Xpos, E should be yPos<br />
PUSH HL ; Puts the return address back onto stack ...<br />
; 166 T states per pixel<br />
XOR A ; reset A to 0 and flags to default<br />
LD A,E ; load Y plot point<br />
RRA ; rotate Right --- divide in half<br />
SCF ; turn on Carry flag-<br />
RRA ; rotate right with the carry flag<br />
OR A ; set flag S on - C flag off<br />
RRA ; rotate Right --- divide in half<br />
<br />
LD L,A ; temp store in L<br />
XOR E ; XOR the Y value<br />
AND %11111000 ; mask out bottom 3 bits<br />
XOR E ; XOR the Y value<br />
<br />
LD H,A ; store High byte<br />
LD A,D ; load X plot point<br />
XOR L ; XOR the temp value<br />
AND %00000111 ; mask out unwanted bits<br />
XOR D ; XOR the X value<br />
RRCA ; divide by 2<br />
RRCA ; divide by 4<br />
RRCA ; divide by 8<br />
<br />
LD L,A ; store Low byte<br />
; now we have the full address<br />
; now use LUT to find which bit to set<br />
LD A,D ; load X plot point<br />
AND %00000111 ; mask out unwanted bits<br />
<br />
; use a LUT to quickly find the bit position for the X position<br />
LD DE,X_PositionBits ; load LUT address into DE<br />
ADD A,E ; Add A to E to get offset into table<br />
LD E,A ; E now points to the LUT entry<br />
LD A,(DE) ; load answer into A<br />
<br />
; output to screen<br />
OR (HL) ; or with contents of address HL<br />
LD (HL),A ; load address HL with Answer from A<br />
END ASM<br />
END SUB]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hall of Fame - Include for ZX Basic]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2646</link>
			<pubDate>Tue, 28 Oct 2025 14:48:44 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2556">tubz74</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2646</guid>
			<description><![CDATA[Hi<br />
<br />
HOF.zxbas - Hall of fame procedures<br />
main.zxbas - a demo<br />
<br />
Attached is a little "library" for a Hall of Fame / High Score table.<br />
<br />
To use it - you need to create two Arrays (at least 2 ...)<br />
<br />
Array 1 = UInteger, for scores<br />
Array 2 = String, for names<br />
<br />
Probably best to keep to 10 entries, but could be more.  You can have more than 1 HOF, so could have Array2, Arry3 etc etc for say Easy Score, Medium Scores, Hard Scores.  As it passes the Arrays by reference, no other variables are needed.<br />
<br />
Completely and utterly free to use, adapt, change, republish how ever you want.<br />
<br />
Arraybase is 0<br />
<br />
SUB HOF_IntialiseHOF(BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING, HOF_IntialTopScore as UINTEGER,HOF_InitialName AS STRING)<br />
Use this to initialise the two HOF arrays - with a "highest score, working down to a low score and gives each entry "InitialName".<br />
<br />
FUNCTION HOF_HighScore_CheckEntry (HOF_Scores() AS UINTEGER, NewHighScore as UINTEGER) AS BYTE <br />
Returns 1 if the High Score can g into the Arrays.<br />
<br />
SUB HOF_HighScore_NewEntry (BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING, NewHighScore as UINTEGER, NewHighScoreName AS STRING)<br />
Puts the new entries (name &amp; score) into the HOF array.<br />
<br />
SUB HOF_Print(BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING, YPOS as INTEGER, XPOS as INTEGER)<br />
A simple print location, witch prints the Score and Names.  Will carry on printing if you have many entries ...<br />
<br />
SUB HOF_PrintSpecial(BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING)<br />
A "pretty High Score screen", that prints the top 10 scores.<br />
<br />
Can probably be improved and made much more efficient.  There are porbably bugs as well (for example not sure what would happen if you had 100 entries with a first high score of 10 ... i think it's probably overflow to 655555 etc.  It includes string.bas and input.bas - not sure if the library needs both of those.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.boriel.com/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=362" target="_blank" title="">HOF.zip</a> (Size: 2.98 KB / Downloads: 137)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.boriel.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=363" target="_blank" title="">Hall Of Fame.png</a> (Size: 2.13 KB / Downloads: 180)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Hi<br />
<br />
HOF.zxbas - Hall of fame procedures<br />
main.zxbas - a demo<br />
<br />
Attached is a little "library" for a Hall of Fame / High Score table.<br />
<br />
To use it - you need to create two Arrays (at least 2 ...)<br />
<br />
Array 1 = UInteger, for scores<br />
Array 2 = String, for names<br />
<br />
Probably best to keep to 10 entries, but could be more.  You can have more than 1 HOF, so could have Array2, Arry3 etc etc for say Easy Score, Medium Scores, Hard Scores.  As it passes the Arrays by reference, no other variables are needed.<br />
<br />
Completely and utterly free to use, adapt, change, republish how ever you want.<br />
<br />
Arraybase is 0<br />
<br />
SUB HOF_IntialiseHOF(BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING, HOF_IntialTopScore as UINTEGER,HOF_InitialName AS STRING)<br />
Use this to initialise the two HOF arrays - with a "highest score, working down to a low score and gives each entry "InitialName".<br />
<br />
FUNCTION HOF_HighScore_CheckEntry (HOF_Scores() AS UINTEGER, NewHighScore as UINTEGER) AS BYTE <br />
Returns 1 if the High Score can g into the Arrays.<br />
<br />
SUB HOF_HighScore_NewEntry (BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING, NewHighScore as UINTEGER, NewHighScoreName AS STRING)<br />
Puts the new entries (name &amp; score) into the HOF array.<br />
<br />
SUB HOF_Print(BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING, YPOS as INTEGER, XPOS as INTEGER)<br />
A simple print location, witch prints the Score and Names.  Will carry on printing if you have many entries ...<br />
<br />
SUB HOF_PrintSpecial(BYREF HOF_Scores() AS UINTEGER, BYREF HOF_Names() AS STRING)<br />
A "pretty High Score screen", that prints the top 10 scores.<br />
<br />
Can probably be improved and made much more efficient.  There are porbably bugs as well (for example not sure what would happen if you had 100 entries with a first high score of 10 ... i think it's probably overflow to 655555 etc.  It includes string.bas and input.bas - not sure if the library needs both of those.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.boriel.com/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=362" target="_blank" title="">HOF.zip</a> (Size: 2.98 KB / Downloads: 137)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.boriel.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=363" target="_blank" title="">Hall Of Fame.png</a> (Size: 2.13 KB / Downloads: 180)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to open fuse as an external emulator in ZXBasic Studio for +2a/b/+3- Windows 11]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2642</link>
			<pubDate>Sun, 05 Oct 2025 18:13:38 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2556">tubz74</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2642</guid>
			<description><![CDATA[ZXStudio doesn't support +3/+2a etc in the included emulator.  Requires at least Beta 6 of ZXBasicStudio<br />
<br />
Use Project/Configure Project to configure.<br />
<br />
Example Compiler Parameters<br />
<br />
<span style="font-weight: bold;" class="mycode_b">-O 0 -S 32768 -H 4768</span>  <span style="text-decoration: underline;" class="mycode_u">-f tap -B -a</span><br />
<br />
(The bold was auto generated, underscore are the options added "-f tap" to create a tap file, "-B -a" required to Generate the basic file and auto start.<br />
<br />
Example Launch External Emulator<br />
<br />
C:\zx\projects\DOSTesting\ZXStartFuse.bat<br />
<br />
This has to be a batch file, rather than direct to the emulator, %1 and %2 are passed into the batch file for ZXBasicStudio - %1 is the path, and %2 the filename excluding the extension.<br />
<br />
ZXStartFuse.bat created in the OS, and renamed to .bat, as it was txt file.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ECHO OFF<br />
"C:&#92;Program Files (x86)&#92;Fuse&#92;fuse.exe" -m plus3 --auto-load %1%2.tap</code></div></div><br />
<br />
This would open a plus3 spectrum in fuse and run the tap file.<br />
<br />
(Thanks to support from telegram for getting this to work ..)]]></description>
			<content:encoded><![CDATA[ZXStudio doesn't support +3/+2a etc in the included emulator.  Requires at least Beta 6 of ZXBasicStudio<br />
<br />
Use Project/Configure Project to configure.<br />
<br />
Example Compiler Parameters<br />
<br />
<span style="font-weight: bold;" class="mycode_b">-O 0 -S 32768 -H 4768</span>  <span style="text-decoration: underline;" class="mycode_u">-f tap -B -a</span><br />
<br />
(The bold was auto generated, underscore are the options added "-f tap" to create a tap file, "-B -a" required to Generate the basic file and auto start.<br />
<br />
Example Launch External Emulator<br />
<br />
C:\zx\projects\DOSTesting\ZXStartFuse.bat<br />
<br />
This has to be a batch file, rather than direct to the emulator, %1 and %2 are passed into the batch file for ZXBasicStudio - %1 is the path, and %2 the filename excluding the extension.<br />
<br />
ZXStartFuse.bat created in the OS, and renamed to .bat, as it was txt file.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ECHO OFF<br />
"C:&#92;Program Files (x86)&#92;Fuse&#92;fuse.exe" -m plus3 --auto-load %1%2.tap</code></div></div><br />
<br />
This would open a plus3 spectrum in fuse and run the tap file.<br />
<br />
(Thanks to support from telegram for getting this to work ..)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CLS/Fade out ASM Sub-routine]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2641</link>
			<pubDate>Sun, 05 Oct 2025 13:37:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2556">tubz74</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2641</guid>
			<description><![CDATA[This is a small clear screen, that sort of fades out the screen pixel by pixel to the background colour.  I took it from one of the Melbourne house books, can't remember which one though.<br />
<br />
No idea if it breaks anything else, but I've not had any issues.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SUB CLSFadeOut()<br />
' Fade out Screen Clearing<br />
<br />
    ASM<br />
<br />
        LD DE,08feh<br />
        NXTFADE:<br />
            LD A,E<br />
            RLCA<br />
            RLCA<br />
            RLCA<br />
            LD E,A<br />
            LD HL,4000H<br />
            LD BC,0018H<br />
            NXT:<br />
                LD A, (HL)<br />
                AND E<br />
                LD (HL),A<br />
                INC HL<br />
            DJNZ NXT<br />
            DEC C<br />
            JR NZ,NXT<br />
            DEC D<br />
        JR NZ,NXTFADE<br />
        LD A,(5C8DH)<br />
        LD (HL),A<br />
        LD D,H<br />
        LD E,L<br />
        INC DE<br />
        LD BC,02C0H<br />
        LDIR<br />
        LD A,(5C48H)<br />
        LD (HL),A<br />
        LD C,3FH<br />
        LDIR<br />
    END ASM<br />
<br />
END SUB</code></div></div>]]></description>
			<content:encoded><![CDATA[This is a small clear screen, that sort of fades out the screen pixel by pixel to the background colour.  I took it from one of the Melbourne house books, can't remember which one though.<br />
<br />
No idea if it breaks anything else, but I've not had any issues.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SUB CLSFadeOut()<br />
' Fade out Screen Clearing<br />
<br />
    ASM<br />
<br />
        LD DE,08feh<br />
        NXTFADE:<br />
            LD A,E<br />
            RLCA<br />
            RLCA<br />
            RLCA<br />
            LD E,A<br />
            LD HL,4000H<br />
            LD BC,0018H<br />
            NXT:<br />
                LD A, (HL)<br />
                AND E<br />
                LD (HL),A<br />
                INC HL<br />
            DJNZ NXT<br />
            DEC C<br />
            JR NZ,NXT<br />
            DEC D<br />
        JR NZ,NXTFADE<br />
        LD A,(5C8DH)<br />
        LD (HL),A<br />
        LD D,H<br />
        LD E,L<br />
        INC DE<br />
        LD BC,02C0H<br />
        LDIR<br />
        LD A,(5C48H)<br />
        LD (HL),A<br />
        LD C,3FH<br />
        LDIR<br />
    END ASM<br />
<br />
END SUB</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[put small ASM programs like bin in a bank  128 and call from basic]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2606</link>
			<pubDate>Thu, 06 Feb 2025 10:24:03 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2606</guid>
			<description><![CDATA[hello, good day.<br />
<br />
zxbasic: <br />
put small ASM programs like bin in a bank(1,3,4,6)  from spectrum 128 and then call them from basic in the &#36;c000 ?<br />
<br />
<br />
how does that work please?<br />
<br />
<br />
<br />
thanks.]]></description>
			<content:encoded><![CDATA[hello, good day.<br />
<br />
zxbasic: <br />
put small ASM programs like bin in a bank(1,3,4,6)  from spectrum 128 and then call them from basic in the &#36;c000 ?<br />
<br />
<br />
how does that work please?<br />
<br />
<br />
<br />
thanks.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Play on a bank ($c000) in spectrum128 and then copy to $4000]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2594</link>
			<pubDate>Sun, 05 Jan 2025 14:06:32 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2594</guid>
			<description><![CDATA[Hello, good day.<br />
<br />
How can you play on the &#36;c000 area if you have the Specrum128 mode? You can assign the banks to &#36;c000.<br />
<br />
thanks.<br />
greetings]]></description>
			<content:encoded><![CDATA[Hello, good day.<br />
<br />
How can you play on the &#36;c000 area if you have the Specrum128 mode? You can assign the banks to &#36;c000.<br />
<br />
thanks.<br />
greetings]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[transfer data to "the spectrum" with flashair.]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2580</link>
			<pubDate>Thu, 12 Dec 2024 20:45:48 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2580</guid>
			<description><![CDATA[<a href="https://spectrumcomputing.co.uk/forums/viewtopic.php?t=12620" target="_blank" rel="noopener" class="mycode_url">https://spectrumcomputing.co.uk/forums/v...hp?t=12620</a><br />
<br />
hello, good day.<br />
<br />
I transfer my data/programs from my notebook to "the spectrum" with flashair.<br />
<br />
works great.<br />
<br />
greetings]]></description>
			<content:encoded><![CDATA[<a href="https://spectrumcomputing.co.uk/forums/viewtopic.php?t=12620" target="_blank" rel="noopener" class="mycode_url">https://spectrumcomputing.co.uk/forums/v...hp?t=12620</a><br />
<br />
hello, good day.<br />
<br />
I transfer my data/programs from my notebook to "the spectrum" with flashair.<br />
<br />
works great.<br />
<br />
greetings]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[char pointer bend to another address]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2579</link>
			<pubDate>Fri, 29 Nov 2024 13:42:06 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2579</guid>
			<description><![CDATA[hello, good day.<br />
<br />
how can you change the character pointer to another address to create new characters?<br />
<br />
I want to change all characters.<br />
<br />
greetings]]></description>
			<content:encoded><![CDATA[hello, good day.<br />
<br />
how can you change the character pointer to another address to create new characters?<br />
<br />
I want to change all characters.<br />
<br />
greetings]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[my THE SPECTRUM has arrived for 99 euros in Germany.]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2577</link>
			<pubDate>Wed, 27 Nov 2024 14:12:58 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2577</guid>
			<description><![CDATA[hello, good day.<br />
<br />
my THE SPECTRUM has arrived for 99 euros in Germany.<br />
<br />
a great device.<br />
<br />
I set it to spectrum maschine 128k.<br />
<br />
my programs-128k from ZX Basic run wonderfully.<br />
also the bank programs in ZX Basic for the 128k with the bank switching.<br />
<br />
greetings<br />
<br />
this interrupt ist ok with "THE SPECTRUM"<br />
----------------------------------------------<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>' Example of the use of the IM2 library<br />
<br />
' Including the IM2 library<br />
#include "IM2.bas"<br />
<br />
' We declare two variables to use inside IM2CallMyRoutine<br />
' These variables must be global<br />
' Time wasting counter<br />
DIM im2_Counter AS UInteger<br />
' Height of the horizon<br />
DIM im2_Horizon AS UInteger = 400<br />
<br />
' We call the subroutine Main<br />
Main()<br />
<br />
' - Main subroutine ---------------------------------------<br />
SUB Main()<br />
&nbsp;&nbsp;&nbsp;&nbsp;CLS<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT AT 23,0;"q - Up, a - Down, s - Stop";<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT AT 0,0;"Height of the horizon:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;' We configure and start up the interruptions.<br />
&nbsp;&nbsp;&nbsp;&nbsp;IM2Start(@MyInterruptRoutine)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;' Infinite loop<br />
&nbsp;&nbsp;&nbsp;&nbsp;DO<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Print the current horizon height<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRINT AT 0,23;im2_Horizon;"&nbsp;&nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' If we press "q", we raise the horizon.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF INKEY&#36; = "q" THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' We raise it as long as it is not 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF im2_Horizon &gt; 0 THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Going up means less pause<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;im2_Horizon = im2_Horizon - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END IF<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Pressing "a" lowers the horizon.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSEIF INKEY&#36; = "a" THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Going down is to pause more<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;im2_Horizon = im2_Horizon + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Pressing "s" stops the interruptions.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSEIF INKEY&#36; = "s" THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IM2Stop()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END IF<br />
&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />
END SUB<br />
<br />
<br />
' - This is our routine which is called at every interruption<br />
' We can't do a lot of things inside<br />
' Do not define local variables, do not use ROM,<br />
' not to dawdle too much...<br />
SUB FASTCALL MyInterruptRoutine()<br />
&nbsp;&nbsp;&nbsp;&nbsp;' The sky is cyan<br />
&nbsp;&nbsp;&nbsp;&nbsp;BORDER 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;' We wait to change from heaven to earth<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOR im2_Counter=0 to im2_Horizon<br />
&nbsp;&nbsp;&nbsp;&nbsp;NEXT im2_Counter<br />
&nbsp;&nbsp;&nbsp;&nbsp;' The land is green<br />
&nbsp;&nbsp;&nbsp;&nbsp;BORDER 4<br />
END SUB</code></div></div>------------------------------------------------]]></description>
			<content:encoded><![CDATA[hello, good day.<br />
<br />
my THE SPECTRUM has arrived for 99 euros in Germany.<br />
<br />
a great device.<br />
<br />
I set it to spectrum maschine 128k.<br />
<br />
my programs-128k from ZX Basic run wonderfully.<br />
also the bank programs in ZX Basic for the 128k with the bank switching.<br />
<br />
greetings<br />
<br />
this interrupt ist ok with "THE SPECTRUM"<br />
----------------------------------------------<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>' Example of the use of the IM2 library<br />
<br />
' Including the IM2 library<br />
#include "IM2.bas"<br />
<br />
' We declare two variables to use inside IM2CallMyRoutine<br />
' These variables must be global<br />
' Time wasting counter<br />
DIM im2_Counter AS UInteger<br />
' Height of the horizon<br />
DIM im2_Horizon AS UInteger = 400<br />
<br />
' We call the subroutine Main<br />
Main()<br />
<br />
' - Main subroutine ---------------------------------------<br />
SUB Main()<br />
&nbsp;&nbsp;&nbsp;&nbsp;CLS<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT AT 23,0;"q - Up, a - Down, s - Stop";<br />
&nbsp;&nbsp;&nbsp;&nbsp;PRINT AT 0,0;"Height of the horizon:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;' We configure and start up the interruptions.<br />
&nbsp;&nbsp;&nbsp;&nbsp;IM2Start(@MyInterruptRoutine)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;' Infinite loop<br />
&nbsp;&nbsp;&nbsp;&nbsp;DO<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Print the current horizon height<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRINT AT 0,23;im2_Horizon;"&nbsp;&nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' If we press "q", we raise the horizon.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF INKEY&#36; = "q" THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' We raise it as long as it is not 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF im2_Horizon &gt; 0 THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Going up means less pause<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;im2_Horizon = im2_Horizon - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END IF<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Pressing "a" lowers the horizon.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSEIF INKEY&#36; = "a" THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Going down is to pause more<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;im2_Horizon = im2_Horizon + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Pressing "s" stops the interruptions.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSEIF INKEY&#36; = "s" THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IM2Stop()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END IF<br />
&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br />
END SUB<br />
<br />
<br />
' - This is our routine which is called at every interruption<br />
' We can't do a lot of things inside<br />
' Do not define local variables, do not use ROM,<br />
' not to dawdle too much...<br />
SUB FASTCALL MyInterruptRoutine()<br />
&nbsp;&nbsp;&nbsp;&nbsp;' The sky is cyan<br />
&nbsp;&nbsp;&nbsp;&nbsp;BORDER 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;' We wait to change from heaven to earth<br />
&nbsp;&nbsp;&nbsp;&nbsp;FOR im2_Counter=0 to im2_Horizon<br />
&nbsp;&nbsp;&nbsp;&nbsp;NEXT im2_Counter<br />
&nbsp;&nbsp;&nbsp;&nbsp;' The land is green<br />
&nbsp;&nbsp;&nbsp;&nbsp;BORDER 4<br />
END SUB</code></div></div>------------------------------------------------]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[which emulator for spectrum: FUSE or EightyOne]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2570</link>
			<pubDate>Wed, 13 Nov 2024 12:19:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2570</guid>
			<description><![CDATA[hello, good day.<br />
<br />
which emulator for the spectrum:<br />
FUSE or EightyOne<br />
<br />
which emulator is closer to the hardware?<br />
<br />
thanks.<br />
greetings]]></description>
			<content:encoded><![CDATA[hello, good day.<br />
<br />
which emulator for the spectrum:<br />
FUSE or EightyOne<br />
<br />
which emulator is closer to the hardware?<br />
<br />
thanks.<br />
greetings]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[where can I get help with the memory on the spectrum 128k?]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2569</link>
			<pubDate>Wed, 13 Nov 2024 08:02:19 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2569</guid>
			<description><![CDATA[hello, good day.<br />
<br />
where can I get help with the memory on the spectrum 128k?<br />
<br />
thanks.<br />
greetings]]></description>
			<content:encoded><![CDATA[hello, good day.<br />
<br />
where can I get help with the memory on the spectrum 128k?<br />
<br />
thanks.<br />
greetings]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[where can I find free memory for data on the spectrum 48k if]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2568</link>
			<pubDate>Wed, 13 Nov 2024 08:00:10 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2568</guid>
			<description><![CDATA[hello, good day.<br />
where can I find free memory for data on the spectrum 48k if<br />
I have made a program with zxbasic?<br />
<br />
I want to move data with memcopy.<br />
<br />
thanks.<br />
best regards]]></description>
			<content:encoded><![CDATA[hello, good day.<br />
where can I find free memory for data on the spectrum 48k if<br />
I have made a program with zxbasic?<br />
<br />
I want to move data with memcopy.<br />
<br />
thanks.<br />
best regards]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[system routines from spectrum 48k for zxbasic.]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2565</link>
			<pubDate>Sun, 10 Nov 2024 14:02:58 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=2198">funkheld</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2565</guid>
			<description><![CDATA[hello, good day.<br />
<br />
I want to buy "the spectrum" at the age of 76.<br />
I come from Germany.<br />
I'm currently playing with the fuse and the zxbasic.<br />
This zxbasic is wonderful.<br />
<br />
I also play with the asm from the zxbasic.<br />
I now want to learn how to use the system routines of the spectrum 48k with the zxbasic-asm.<br />
<br />
Where can I find a system listing for the spectrum 48k?<br />
<br />
thanks.<br />
Best wishes]]></description>
			<content:encoded><![CDATA[hello, good day.<br />
<br />
I want to buy "the spectrum" at the age of 76.<br />
I come from Germany.<br />
I'm currently playing with the fuse and the zxbasic.<br />
This zxbasic is wonderful.<br />
<br />
I also play with the asm from the zxbasic.<br />
I now want to learn how to use the system routines of the spectrum 48k with the zxbasic-asm.<br />
<br />
Where can I find a system listing for the spectrum 48k?<br />
<br />
thanks.<br />
Best wishes]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Includes in ASM]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2549</link>
			<pubDate>Wed, 27 Mar 2024 15:16:21 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=1744">bracckets</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2549</guid>
			<description><![CDATA[Is it possible to use assembler includes in the inline ASM code blocks<br />
so the assembler can be broken down into files, e.g.<br />
<br />
INCLUDE maths.asm<br />
<br />
Also is it possible to include binary files in the assembler e.g.<br />
<br />
BINARY 'test.bin'<br />
<br />
Thanks]]></description>
			<content:encoded><![CDATA[Is it possible to use assembler includes in the inline ASM code blocks<br />
so the assembler can be broken down into files, e.g.<br />
<br />
INCLUDE maths.asm<br />
<br />
Also is it possible to include binary files in the assembler e.g.<br />
<br />
BINARY 'test.bin'<br />
<br />
Thanks]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Rounding float numbers to 2 decimal places]]></title>
			<link>https://forum.boriel.com/showthread.php?tid=2537</link>
			<pubDate>Fri, 29 Dec 2023 22:41:45 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.boriel.com/member.php?action=profile&uid=1680">rbiondi</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.boriel.com/showthread.php?tid=2537</guid>
			<description><![CDATA[Hello,<br />
<br />
I need to round or at least truncate a Float variable to 2 decimal places.<br />
Do you know how this could be accomplished since there's no ROUND function?<br />
<br />
Thank you very much,<br />
Rogerio]]></description>
			<content:encoded><![CDATA[Hello,<br />
<br />
I need to round or at least truncate a Float variable to 2 decimal places.<br />
Do you know how this could be accomplished since there's no ROUND function?<br />
<br />
Thank you very much,<br />
Rogerio]]></content:encoded>
		</item>
	</channel>
</rss>