Re: A83: Re: interrupts


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

Re: A83: Re: interrupts




1. Is 8f00-8fff safe to use? What is it used for by the os?
2. Why 8f01? If there's a 00 at the data bus, that would load the address at
8f00-8f01, but 8f00 would be trash in your code! And aren't you putting all
the vectors in the wrong order (MSB-LSB) because of this?

Linus

On 20-Jun-98, Florent Dhordain wrote:

>    Yeah, try that :

>        ld hl, $8F01 ; let's put the table there. The 1 stuff is needed !
>        ld de, inthand
>        ld b, $80    ; put 128 vectors
>VECTL:
>        ld      (hl),e ; LSB first, as the table starts @ i*256+1
>        inc     hl
>        ld      (hl),d
>        inc     hl
>        djnz    VECTL
>        ld a, $8f
>        ld i, a
>        im 2
>        ei        ; if you did a di somewhere before, else don't need

>( code from movax )

>Using this you won't have to let your int handler at a $XYXY address (i.e.
>$8585
>or $9393). You could let it where it was in the code.

>Hey, I've made an error in the inthand code :

>instead of :
>>>    ld a, (hl)            ; check MSB
>>>    or a                    ; is it 0 ?

>it should have been :
>    ld a, (hl)
>    dec a

>cause when apd counter = $0101, then it does :
>    ld hl, $8009
>    dec (hl)
>    ret nz
>    inc hl
>    dec (hl)
>    ret nz
>and then it executes the rest of the apd code.

>- Florent

>PS :

>        Created by:   PKZIP: 2.0 under Amiga
> Needed to extract: PKUNZIP: 2.0

>Ah, ok, but I very seldomly run pkunzip -vt ...


>-----Message d'origine-----
>De : Linus Akesson <lairfight@softhome.net>
>À : Florent Dhordain <assembly-83@lists.ticalc.org>
>Date : samedi 20 juin 1998 20:04
>Objet : Re: A83: Re: interrupts


>>
>>On 19-Jun-98, Florent Dhordain wrote:
>>
>>>    To catch the apd, you'll have to add an interrupt handler :
>>
>>>inthand:
>>>    exx
>>>    ex af, af'        ; use alternate registers, to prevent any change to
>>>normal
>>>ones
>>>    ld hl, $800A
>>>    ld a, (hl)            ; check MSB
>>>    or a                    ; is it 0 ?
>>>    jr nz, normalint    ; no ==> no APD
>>>    dec hl
>>>    ld a, (hl)            ; check LSB
>>>    dec a                ; is it 1 ( you can't check if it is 0, because
the
>>>calc would have
>>>                            ; already APD
>>>    jr nz, normalint    ; no ==> no APD
>>
>>>; here, shut off the calc, and some other stuff :
>>>    inc hl
>>>    ld a, $74            ; restore apd counter, so it doesn't run this code
>>>twice
>>>    ld (hl), a
>>>    ld a, $8            ; clear interrupt flip-flops
>>>    out (3), a
>>>    ld a, $1            ; enable only [on] int, turn off lcd
>>>    out (3), a
>>>    pop hl            ; so we'll return to when the int occured
>>>    exx
>>>    ex af, af'           ; restore normal registers, as the [on] press will
>>>cause another int
>>>    ei
>>>    halt
>>
>>>normalint:
>>>    jp $3A        ; jump over the exx & ex af, af'
>>
>>>I haven't tested it, but it should work.
>>
>>>- Florent
>>
>>How do you install interrupt handlers?  I've been having some ideas about
>>switching to interrupt mode 2, then having a 256-bytes big table at
>>9400h-94ffh with 93h all over it, then having the interrupt handler at
9393h,
>>but is there an easier way?
>>
>>Linus
>>




References: