This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | Last revision Both sides next revision | ||
mg_notes:apple_iic:iic_bugs [2017/11/10 03:34] M.G. |
mg_notes:apple_iic:iic_bugs [2017/11/10 03:37] M.G. |
||
---|---|---|---|
Line 37: | Line 37: | ||
lda addrh,x ; <-- SEE COMMENTS BELOW | lda addrh,x ; <-- SEE COMMENTS BELOW | ||
and #$0f ; only lower nibble valid | and #$0f ; only lower nibble valid | ||
- | beq tsnoram ; no RAM somehow! | + | beq tsnoram ; no RAM somehow! [note: if bank 0, skips checking result of RAM test] |
- | bcs tsloop ; loop until we find a bank | + | bcs tsloop ; loop until we find a bank [carry set = no RAM in bank] |
adc #1 ; C = 0 from compare | adc #1 ; C = 0 from compare | ||
tsnoram sta numbanks,y | tsnoram sta numbanks,y | ||
Line 52: | Line 52: | ||
That being said, MAME before [[https://github.com/mamedev/mame/commit/bdcb98307822e79c242782ee67bef966bf4c25de|bdcb983]] did not float the bus for $C0C0-$C0CF. A non-floating bus results in ROM $03 hanging when the card is first accessed, and, due to changes made by Apple, a hang at boot for ROM $04 (and presumably IIc Plus ROM $05). | That being said, MAME before [[https://github.com/mamedev/mame/commit/bdcb98307822e79c242782ee67bef966bf4c25de|bdcb983]] did not float the bus for $C0C0-$C0CF. A non-floating bus results in ROM $03 hanging when the card is first accessed, and, due to changes made by Apple, a hang at boot for ROM $04 (and presumably IIc Plus ROM $05). | ||
- | Another minor issue is that the code wouldn't find a theoretical Slinky that had only one 64K bank built into it, as the loop terminates when the bank hits 0 (beq tsnoram), immediately before the carry flag is checked to see if any RAM was found in bank 0. | + | Another minor issue is that the code wouldn't find a theoretical Slinky that had only one 64K bank built into it, as the loop terminates when the bank hits 0 (beq tsnoram) even if the carry flag is clear because RAM was found in bank 0. |
The code could be fixed by using the stack to save the counter and comes out a few bytes shorter: | The code could be fixed by using the stack to save the counter and comes out a few bytes shorter: |