[A83] Re: Official H**s Replacement Commands & Questions & PulseWidthMod


[Prev][Next][Index][Thread]

[A83] Re: Official H**s Replacement Commands & Questions & PulseWidthModulation




>> HRC1: ex de,hl = push de \ push hl \ pop de \ pop hl ;this should work, I
>> guess
>
>HRC1a (recommended):
> ex de, hl = push bc \ ld b,d \ ld c,e \ ld d,h \ ld e,l \
> ld h,b \ ld l,c\ pop bc

Wow! That one is even better!

>> HRC2: ld a,xx = push bc \ ld b,xx \ ld a,b \ pop bc
>> More crap coming soon, maybe...
>> Feel free to add other commands...
>
>HRC3:  push hl = ld iy,0000h \ add iy,sp \ ld (iy+0),l \ ld (iy+1),h
>HRC3a: pop hl = ld iy,0000h \ add iy,sp \ ld l,(iy+0) \ ld h,(iy+1)

Then why not make HRC1b: ex de,hl = ld iy,0000h \ add iy,sp \ ld (iy+0),l \
ld (iy+1),h \ ld b,d \ ld c,e \ ld d,h \ ld e,l \ ld h,b \ ld l,c\ pop bc
\ld iy,0000h \ add iy,sp \ ld l,(iy+0) \ ld h,(iy+1)

However, you loose iy with this. Or does a normal pushpop do that too?
Otherwise, a push/pop iy will suffice:

HRC3b:  push hl = push iy \ ld iy,0000h \ add iy,sp \ ld (iy+0),l \ ld
(iy+1),h \ pop iy

HRC3c: pop hl = push iy \ ld iy,0000h \ add iy,sp \ ld l,(iy+0) \ ld
h,(iy+1) \ pop iy    ;push/pop iy are 2-byte commands! How crappy!

HRC1c: ex de,hl = push iy \ ld iy,0000h \ add iy,sp \ ld (iy+0),l \ ld
(iy+1),h \ ld b,d \ ld c,e \ ld d,h \ ld e,l \ ld h,b \ ld l,c\ pop bc \ld
iy,0000h \ add iy,sp \ ld l,(iy+0) \ ld h,(iy+1) \ pop iy

ASM Studio 8x for the HRC1c: 17 instructions, 35 bytes and 197 whole clock
cycles instead of 1 instruction, one byte, 4 cycles!!! That's a
un-speed-gain of 97.9695% and an un-size ratio of 97 1/7%! How efficient!
Even more efficient than TI-BASIC! That's a reason to step-over to ASM, you
hays guys! Oh, sorry, it's too hard to learn...

>Ha ha ha, good joke
>(more serious comments below)
>
>
>> Question:
>> 1 What does ldir do? Does it copy the graph buffer to the screen? In
>>    ionm.z80 it's used to run a module stored in saferam1 (graph buffer?)
>> 2 Is there a command that extracts bits from a variable? I think 'bit'
does
>>    the trick, so bit 1 is the first bit of a and bit 2 is the 2nd bit of
a
>>    and bit 3 the 3rd, ... and I think it sets the zero flag for 1 and the
>>    nonzero flag for 0. Is this correct?
>Yes: 'bit' does the trick, but z is set on '0' and nz on '1'
>Example:
>
>BHL_Plus_DE:
>  add hl,de
>  bit 7,h ; the 8th bit
>  ret nz

;That's what I need.
;I want to make a printer driver together with the EDE1400. It needs a 2400
;baud 8 bits, no parity, 1 stop bit (does it always to be '1' (or '0')?)
;serial signal (to convert it to a correct parallel signal). If I can adjust
;the program so that I can get 2400 baud, it's easy! 1 cycle is 6000000/4 =
;1.5 megabaud, so I probably need 625 cycles per bit. Enough time to play
;with.

>  inc b
>  res 7,h ; the 8th bit

;My guess: the above makes that bit 0.

>  set 6,h ; the 7th bit

;Makes 7th bit 1(?)

>  ret

;Thanks, you, and Dan Weiss, and Kirk Meyer.

>in C:
>
> if(hl == 0x8000){ file://bit 7 is set;
>   b++;
>   hl = 0x4000 // reset bit 7, set bit 6
> }
>
>compare the following if you don't get it
>
>bit from h:     bits from l:
>7(8000h) 7(80h)
>6(4000h) 6(40h)
>5(2000h) 5(20h)
>4(1000h) 4(10h)
>3(800h) 3(8h)
>2(400h) 2(4h)
>1(200h) 1(2h)
>0(100h) 0(1h)

I'm not a C programmer, and I don't understand much of this, but what does
the file://bit do in the if(hl == ... ?

>Even more serious comments below:
>>
>> PWM:
>>
>> Didn't test it, but this should work. The 'on' pulse is a bit longer than
>> the 'off' pulse.
>>
>> begin:
>>     ld c,0
>> loop:
>>     bcall(_getky)
>>     cp kDown
>>     call z, incc    ;speed down
>>     cp kUp
>>     call z, decc    ;speed up
>>     cp kClear
>>     ret z
>>     ld a,C3    ;off
>>     out(00),a
>>     call wait
>>     ld a,C0    ;on
>>     call wait
>>     jp loop
>> incc:
>>     inc c \ ret
>> decc:
>>     dec c \ ret
>> wait:
>      ld b,c
>>     ei
>waitloop:
>      halt \ djnz waitloop \ ret
>>
>
>AFAIK, b is being decremented along the djnz, so I made b being
>loaded from c each time

That's a better solution than my push/pop. Thanks. Also, thanks to the
others again. Kirk Meyer for making me discover the world of $-2.

--Ronald--






Follow-Ups: