[A83] Re: Official H**s Replacement Commands & Questions & PulseWidthMod
[Prev][Next][Index][Thread]
[A83] Re: Official H**s Replacement Commands & Questions & PulseWidthModulation
In VTI, the Run Indicator got stuck. Clear didn't help.
>Oops. You might have to keep the _getk in the timing loop. It probably
>didn't quite hang it -- if you held down CLEAR it should've snapped out of
>it. The other potential problem might be if _getk doesn't preserve BC.
>
>-----Original Message-----
>From: assembly-83-bounce@lists.ticalc.org
>[mailto:assembly-83-bounce@lists.ticalc.org]On Behalf Of Ronald Teune
>Sent: Tuesday, July 03, 2001 11:06 AM
>To: assembly-83@lists.ticalc.org
>Subject: [A83] Re: Official H**s Replacement Commands & Questions &
>PulseWidthModulation
>
>
>
>>Actually the one I sent later was a bit better -- because it didn't use
>>HALT, and I fixed the errors in the first part. You'll get only low
>>frequencies with this one (and not very good variation either -- something
>>like 160Hz, 80Hz, 53Hz, 40Hz, etc -- not much in between.
>
>Well, I compiled it, and it hung the calculator.
>
>.NOLIST
>#define equ .equ
>#define EQU .equ
>#define end .end
>#include "ti83plus.inc"
>;#include "tokens.inc"
>.LIST
>#define bcall(xxxx) rst 28h \ .dw xxxx
>#define bcallz(xxxx) jr nz,$+5 \ rst 28h \ .dw xxxx
>#define bcallnz(xxxx) jr z,$+5 \ rst 28h \ .dw xxxx
>#define bcallc(xxxx) jr nc,$+5 \ rst 28h \ .dw xxxx
>#define bcallnc(xxxx) jr c,$+5 \ rst 28h \ .dw xxxx
>#define bjump(xxxx) call 50h \ .dw xxxx
> .addinstr BCALL * EF 3 NOP 1
>saferam1 =9872h ;Ion-
>progstart =9327h ;headers
>_getk =4A18h
> .org progstart-2
> .db $BB,$6D
>#define WAIT ei\ halt\ djnz $-2
>begin:
> ld bc,$8000
>loop:
> bcall(_getk)
> cp kDown
> jr nz,notdown
> inc bc
>notdown:
> cp kUp
> jr nz,notup
> dec bc
>notup:
> cp kClear
> ret z
> ld a,$C3 ;off
> out (00h),a
> call wait
> ld a,$C0 ;on
> out (00h),a
> ld hl,loop ;jump to loop when
> push hl ;subroutine is done
>wait:
> ld h,b
> ld l,c
>waitloop:
> dec hl
> ld a,h
> or l
> jr nz,waitloop
> ret
>.end
>END
>
>>Thanks for the explanation.
>>This should work
>>
>>#define WAIT ei\ halt\ djnz $-2 ; hey, that's cool!
>>begin:
>> ld b,0
>>loop:
>> bcall(_getky)
>> cp kDown
>> inc b \ ret ;This isn't
>> jr nz,notdown ;all correct
>>notdown: ;I'm afraid
>> cp kUp ;
>> jr nz,notup ;
>> dec b \ ret ;
>>notup:
>> cp kClear
>> ret z
>> ld a,$C3 ;off You're right, I forgot the $
>> out($00),a
>> push bc ;added
>> WAIT
>> pop bc ;added
>> ld a,$C0 ;on
>> out($00),a ;added
>> push bc ;added
>> WAIT
>> pop bc ;added
>> jr loop
>>
>>>It doesn't exactly seem that your code would work, because B is always
>>reset
>>>to the value 0 after one go through the loop, which would make changing
>the
>>>width not be noticed. But optimization ideas anyway:
>>>
>>>#define WAIT ei\ halt\ djnz $-2
>>>begin:
>>> ld b,0
>>>loop:
>>> bcall(_getky)
>>> cp kDown
>>> inc b \ ret
>>> jr nz,notdown
>>>notdown:
>>> cp kUp
>>> jr nz,notup
>>> dec b \ ret
>>>notup:
>>> cp kClear
>>> ret z
>>> ld a,$C3 ;off
>>> out($00),a
>>> WAIT
>>> ld a,$C0 ;on
>>> WAIT
>>> jr loop
>>>
>>>-----Original Message-----
>>>From: assembly-83-bounce@lists.ticalc.org
>>>[mailto:assembly-83-bounce@lists.ticalc.org]On Behalf Of Ronald Teune
>>>Sent: Monday, July 02, 2001 6:39 AM
>>>To: Assembly 83
>>>Subject: [A83] Official H**s Replacement Commands & Questions &
>>>PulseWidthModulation
>>>
>>>
>>>
>>>HRC1: ex de,hl = push de \ push hl \ pop de \ pop hl ;this should work, I
>>>guess
>>>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...
>>>
>>>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?
>>>
>>>PWM:
>>>
>>>Didn't test it, but this should work. The 'on' pulse is a bit longer than
>>>the 'off' pulse.
>>>
>>>begin:
>>> ld b,0
>>>loop:
>>> bcall(_getky)
>>> cp kDown
>>> call z, incb ;speed down
>>> cp kUp
>>> call z, decb ;speed up
>>> cp kClear
>>> ret z
>>> ld a,C3 ;off
>>> out(00),a
>>> call wait
>>> ld a,C0 ;on
>>> call wait
>>> jp loop
>>>incb:
>>> inc b \ ret
>>>decb:
>>> dec b \ ret
>>>wait:
>>> ei \ halt \ djnz wait \ ret
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>
>
>
>