[A83] Re: im 2
[Prev][Next][Index][Thread]
[A83] Re: im 2
Fron your explanation, I understand this:
mem_address_$HH00:
$HH00: .dw pointer1
$HH02: .dw pointer2
$HH04: .dw pointer3
$HH06: .dw pointer4
$HHxx: .dw ...
;if you do:
ld i,HH ; HH is highest bytes of mem table above.
im 2
; then if an interrupt occurs, the interrupt device produces an 8 bit number,
; e.g. 06h, whigh is used as the lower bytes. (the produced byte itself,
; I'll refer to as $II.
; the address would then become $HH06. The word from that place is read,
; and a jump takes place to the address the word at $HH06 references.
; Naturally, the lowest bit of $II would be 0 (producing an even number),
; because a read from an uneven address would give an invalid pointer address
; this could be interpreted as a 7-bit number.
; But when you say that an 8-bit number is produced, you mean that the lowest
; bit (bit 0) of $II is sometimes 1 too, thus producing an odd address???
; Or do you mean that it is an 8-bit byte with bit 0 on 0?
--Peter Martijn
>
> According to the cpu manual, when you use interrupt mode 2, you should create a pointer table somewhere in memory, then put in the I reg the most significant byte. When an interrupt happens the Z80 takes the I register and the interrupting device provides the lower 8 bits. Then it jumps to the pointer stored at the address that is formed. The manual also says that the lowest bit provided should always be 0 to create even numbers, because pointers are 16 bit and therefore take 2 bytes. For now I've discovered that this isn't the case on the 83-. The interrupting device seems to generate an 8 bit numbers (not 7). But is this also on the 83+(SE)?
>
> --Tijl Coosemans
> -----------------------------------------------------
> Mail.be, Free WebMail and Virtual Office
> http://www.mail.be
>
>
>
References:
- [A83] im 2
- From: Tijl Coosemans <tijl.coosemans@mail.be>