Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
mg_notes:apple_iic:iic_bugs [2017/11/10 03:37]
M.G.
mg_notes:apple_iic:iic_bugs [2017/11/10 03:46] (current)
M.G.
Line 78: Line 78:
           sta   ​data,​x ​       ; restore data           sta   ​data,​x ​       ; restore data
           pla                 ; restore counter (net save 4 bytes)           pla                 ; restore counter (net save 4 bytes)
-          beq   ​tsnoram ​      ; no RAM somehow! ​(if we fixed to find lonely bank 0, returned size would be wrong)+          beq   ​tsnoram ​      ; no RAM somehow!
           bcs   ​tsloop ​       ; loop until we find a bank           bcs   ​tsloop ​       ; loop until we find a bank
           adc   #​1 ​           ; C = 0 from compare           adc   #​1 ​           ; C = 0 from compare
 +tsnoram ​  ​sta ​  ​numbanks,​y
 +          lsr   a
 +          sta   ​sizetemp ​     ; sizetemp = upper byte of block count
 +          rts
 +</​code>​
 +
 +We could use a couple of those bytes to fix the bank 0 issue:
 +
 +<​code>​
 +testsize ​ equ   *
 +          lda   #​0 ​           ; zero address reg l/m
 +          sta   ​addrl,​x
 +          sta   ​addrm,​x
 +          lda   #​$10 ​         ; start at 1 meg and go down
 +          sec
 +tsloop ​   sbc   #​1 ​           ; move down a bank
 +          sta   ​addrh,​x
 +          pha                 ; save counter, +1 byte code added
 +          lda   ​data,​x ​       ; save existing data
 +          pha
 +          dec   ​addrl,​x ​      ; fix address (undo auto-increment)
 +          lda   #​$a5 ​         ; common apple check byte
 +          sta   ​data,​x ​       ; store it
 +          dec   ​addrl,​x ​      ; fix...
 +          eor   ​data,​x ​       ; 0 if the data is there
 +          dec   ​addrl,​x ​      ; fix...
 +          cmp   #​1 ​           ; C = 0 if data okay
 +          pla
 +          sta   ​data,​x ​       ; restore data
 +          pla                 ; restore counter (net save 4 bytes)
 +          bcc   ​tsgotram ​     ; RAM found, extra branch net cost 2 bytes
 +          beq   ​tsnoram ​      ; still won't find lonely bank 0
 +          bne   ​tsloop ​       ; loop until we find a bank
 +tsgotram ​ adc   #​1 ​           ; C = 0 from compare
 tsnoram ​  ​sta ​  ​numbanks,​y tsnoram ​  ​sta ​  ​numbanks,​y
           lsr   a           lsr   a
Line 108: Line 142:
           sta   ​data,​x ​       ; restore data           sta   ​data,​x ​       ; restore data
           pla                 ; get counter back, sets N and Z, net save 4 bytes over existing code           pla                 ; get counter back, sets N and Z, net save 4 bytes over existing code
 +          bcc   ​tsgotram ​     ; RAM found, extra branch net cost 2 bytes
           beq   ​tsnoram ​      ; still won't find lonely bank 0           beq   ​tsnoram ​      ; still won't find lonely bank 0
-          ​bcs   tsloop ​       ; loop until we find a bank +          ​bra   tsloop ​       ; loop until we find a bank 
-          adc   #​1 ​           ; C = 0 from compare, could also use inc a+tsgotram: ​adc   #​1 ​           ; C = 0 from compare, could also use inc a
 tsnoram: ​ sta   ​numbanks,​y tsnoram: ​ sta   ​numbanks,​y
           lsr   a           lsr   a