Finding LSB in a register
Re: Finding LSB in a register
Mine is 13 bytes (checked with www.asm80.com, which is awesome!).
Metalbrain's is 12 bytes, if you remove the ret c and replace ld hl,0 with xor h/xor l.
Metalbrain's is 12 bytes, if you remove the ret c and replace ld hl,0 with xor h/xor l.
Re: Finding LSB in a register
Could you replace XOR 255 with CPL and get it down to 11 bytes?
Re: Finding LSB in a register
Yep, that works
Didn't know about that instruction!
Didn't know about that instruction!
Re: Finding LSB in a register
If you're doing regular AND-then-OR masking, you can just use OR B instead of CPL: AND B (and the same for C) as it doesn't matter what the mask is when the pixel value is set. That would get it down to 9 bytes.
(EDIT: Actually in that case all you need to create the mask is a single DEC instruction. So this method only requires one byte.)
Maybe other types of masking would work, for instance OR for the mask and then XOR for the sprite. Are you doing the same thing to create a mask on the left using the MSB?
(EDIT: Actually in that case all you need to create the mask is a single DEC instruction. So this method only requires one byte.)
Maybe other types of masking would work, for instance OR for the mask and then XOR for the sprite. Are you doing the same thing to create a mask on the left using the MSB?
- Metalbrain
- Microbot
- Posts: 107
- Joined: Thu Feb 15, 2018 2:14 pm
- arkannoyed
- Manic Miner
- Posts: 436
- Joined: Mon Feb 05, 2018 9:56 am
- Location: Northamptonshire
Re: Finding LSB in a register
Wow, some great ideas, and it certainly looks as if the 8 bit logic methods will win. I'll have a go with some ideas later and see what works best.
Lots of re-designing to do to make the printing byte-wise work as opposed to bit-wise, which is how the Chess pieces are done currently. The speed improvement will be huge though, and hopefully might lose a few bytes as well as a bonus!
Lots of re-designing to do to make the printing byte-wise work as opposed to bit-wise, which is how the Chess pieces are done currently. The speed improvement will be huge though, and hopefully might lose a few bytes as well as a bonus!
- lister_of_smeg
- Microbot
- Posts: 145
- Joined: Thu Nov 16, 2017 1:44 pm
Re: Finding LSB in a register
ld bc,hl isn't a valid z80 instruction
Last edited by lister_of_smeg on Fri Jan 18, 2019 9:48 am, edited 2 times in total.
- arkannoyed
- Manic Miner
- Posts: 436
- Joined: Mon Feb 05, 2018 9:56 am
- Location: Northamptonshire
Re: Finding LSB in a register
yes, but ld B,H and ld C,L are, which does the same thing.
- arkannoyed
- Manic Miner
- Posts: 436
- Joined: Mon Feb 05, 2018 9:56 am
- Location: Northamptonshire
Re: Finding LSB in a register
Seems to almost do what it needs to. The only thing left that I should've mentioned before is that it needs to RESet the LSB in HL (the data register).
So whereas maybe HL=05c0h, after creating the mask, bit 6 of L needs to be cleared, giving the result HL=0580h.
Does that make sense?
So whereas maybe HL=05c0h, after creating the mask, bit 6 of L needs to be cleared, giving the result HL=0580h.
Does that make sense?
Re: Finding LSB in a register
Wow, apparently asm80.com is too clever for its own good - it automatically converted ld bc,hl to ld b,h/ld c,l!arkannoyed wrote: ↑Fri Jan 18, 2019 9:46 am yes, but ld B,H and ld C,L are, which does the same thing.
- lister_of_smeg
- Microbot
- Posts: 145
- Joined: Thu Nov 16, 2017 1:44 pm
Re: Finding LSB in a register
This any good?arkannoyed wrote: ↑Fri Jan 18, 2019 2:01 pm Seems to almost do what it needs to. The only thing left that I should've mentioned before is that it needs to RESet the LSB in HL (the data register).
So whereas maybe HL=05c0h, after creating the mask, bit 6 of L needs to be cleared, giving the result HL=0580h.
Does that make sense?
Code: Select all
ld d, h
ld e, l
dec de
ld a, d
xor h
ld d, a
cpl
and h
ld h, a
ld a, e
xor l
ld e, a
cpl
and l
ld l, a
rr d
rr e