change a bit in a variable ?

News,announcements,programming,fixes,game patches & discussions.

Moderator: troed

Post Reply
User avatar
exxos
Site Admin
Site Admin
Posts: 7832
Joined: Wed Aug 16, 2017 11:19 pm
Location: UK
Contact:

change a bit in a variable ?

Post by exxos » Tue Jun 25, 2019 1:18 pm

In STOS there is a function "BCLR" which can clear a bit (or BSET set a bit) in a variable.. however, hisoft basic doesn't seem to have such a function :roll: I could convert the number to a string and use MID$ and convert back to a number, but that seems a bit shitty.. does anyone know of any better ways to manipulate bits in variables ?
4MB STFM 1.44 FD- VELOCE+ 020 STE - 4MB STE 32MHz - STFM 16MHz - STM - MEGA ST - Falcon 030 CT60 - Atari 2600 - Atari 7800 - Gigafile - SD Floppy Emulator - PeST - HxC - CosmosEx - Ultrasatan - various clutter

https://www.exxoshost.co.uk/atari/ All my hardware guides - mods - games - STOS
https://www.exxoshost.co.uk/atari/last/storenew/ - All my hardware mods for sale - Please help support by making a purchase.

mikro
Posts: 159
Joined: Mon Aug 28, 2017 11:22 pm

Re: change a bit in a variable ?

Post by mikro » Wed Jun 26, 2019 7:34 am

In case that Hisoft Basic doesn't support logical operations (AND, XOR), that could be pretty tricky. :) If it does, then it's easy:

<input> XOR 01000000 <--- flips the 6th bit
<input> AND 01000000 <--- clears the 6th bit
<input> OR 01000000 <--- sets the 6th bit

User avatar
exxos
Site Admin
Site Admin
Posts: 7832
Joined: Wed Aug 16, 2017 11:19 pm
Location: UK
Contact:

Re: change a bit in a variable ?

Post by exxos » Wed Jun 26, 2019 8:46 am

Interesting..

I can't see how AND wousod clear a bit though.. As if bit zero was 0 on the input, ANDed with zero, the output would be zero. In fact it would clear all bits other than the bit which is set ?

NAND. Would make sense I think. As a high on bit 7 would result in a zero ?
4MB STFM 1.44 FD- VELOCE+ 020 STE - 4MB STE 32MHz - STFM 16MHz - STM - MEGA ST - Falcon 030 CT60 - Atari 2600 - Atari 7800 - Gigafile - SD Floppy Emulator - PeST - HxC - CosmosEx - Ultrasatan - various clutter

https://www.exxoshost.co.uk/atari/ All my hardware guides - mods - games - STOS
https://www.exxoshost.co.uk/atari/last/storenew/ - All my hardware mods for sale - Please help support by making a purchase.

mikro
Posts: 159
Joined: Mon Aug 28, 2017 11:22 pm

Re: change a bit in a variable ?

Post by mikro » Wed Jun 26, 2019 1:01 pm

Oops, you are right.

It should have been: <input> AND 10111111 <--- clears the 6th bit

Too hot! :)

User avatar
exxos
Site Admin
Site Admin
Posts: 7832
Joined: Wed Aug 16, 2017 11:19 pm
Location: UK
Contact:

Re: change a bit in a variable ?

Post by exxos » Wed Jun 26, 2019 2:28 pm

Awesome thanks. I think logic operations are in hisoft, will check it out when I get home later.

Yeah not looking forward to the pending heatwave here over the next few days!
4MB STFM 1.44 FD- VELOCE+ 020 STE - 4MB STE 32MHz - STFM 16MHz - STM - MEGA ST - Falcon 030 CT60 - Atari 2600 - Atari 7800 - Gigafile - SD Floppy Emulator - PeST - HxC - CosmosEx - Ultrasatan - various clutter

https://www.exxoshost.co.uk/atari/ All my hardware guides - mods - games - STOS
https://www.exxoshost.co.uk/atari/last/storenew/ - All my hardware mods for sale - Please help support by making a purchase.

tzok
Posts: 137
Joined: Sat Dec 30, 2017 2:27 pm

Re: change a bit in a variable ?

Post by tzok » Wed Jun 26, 2019 8:51 pm

It's pretty common in C...

Set bit 3 (0 based index, so bit 3 is 4th bit):
a|=(1<<3)

Clear bit 3:
a&=~(1<<3)

<< - shift left
| - bitwise OR
& - bitwise AND
~ - bitwise NOT

Unfortunately Spectrum BASIC doesn't have bitwise operators, it only has logical ones :( I'm unsure if in HiSoft BASIC it is any different.

User avatar
exxos
Site Admin
Site Admin
Posts: 7832
Joined: Wed Aug 16, 2017 11:19 pm
Location: UK
Contact:

Re: change a bit in a variable ?

Post by exxos » Wed Jun 26, 2019 9:03 pm

1.jpg
1.jpg (130.87 KiB) Viewed 448 times
4MB STFM 1.44 FD- VELOCE+ 020 STE - 4MB STE 32MHz - STFM 16MHz - STM - MEGA ST - Falcon 030 CT60 - Atari 2600 - Atari 7800 - Gigafile - SD Floppy Emulator - PeST - HxC - CosmosEx - Ultrasatan - various clutter

https://www.exxoshost.co.uk/atari/ All my hardware guides - mods - games - STOS
https://www.exxoshost.co.uk/atari/last/storenew/ - All my hardware mods for sale - Please help support by making a purchase.

Post Reply

Return to “SOFTWARE PROGRAMMING & DISCUSSION”