苹果IIc系列固件中发现的错误

程序员发现了影响Apple IIc和Apple IIc Plus的固件错误, 迈克尔·吉德罗(Michael Guidero)。  根据发布 他的博客,以下代码和注释中所述的错误是由于他在MAME中对Apple IIc和Apple IIc Plus仿真而产生的。

内存扩展固件具有以下代码来测试内存扩展卡的大小(如果已安装):

numbanks  equ   $03bb         ; screen hole - $c0
sizetemp  equ   $0478         ; screen hole shared
addrl     equ   $bff8         ; slinky address reg for indirect use
addrm     equ   $bff9         ; real registers are from $c0c0-$c0c3
addrh     equ   $bffa         ; ..
data      equ   $bffb         ; slinky data reg

; at entry x is expected to have $c8 (slot * $10 + $88)
; and y is expected to contain $c4 (slot $Cn)
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
          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
          lda   addrh,x       ; <-- SEE COMMENTS BELOW
          and   #$0f          ; only lower nibble valid
          beq   tsnoram       ; no RAM somehow!
          bcs   tsloop        ; loop until we find a bank
          adc   #1            ; C = 0 from compare
tsnoram   sta   numbanks,y
          lsr   a
          sta   sizetemp      ; sizetemp = upper byte of block count
          rts

如果您注意到该代码从所指示的行开始,则可以看到该代码抓住了Slinky地址寄存器的高字节,并将低半字节直接用作计数器值。

问题是,当没有安装内存扩展卡时,就没有寄存器,并且值就是浮动总线。代码跳出循环的唯一原因是因为浮动总线通常碰巧有一堆字节流,低字节中有0。

就是说,当前的MAME不会使$ C0C0- $ C0CF的总线浮动。这将导致ROM $ 03在首次访问该卡时挂起,并且由于ROM $ 04中的更改而在引导时挂起了ROM $ 04。

到目前为止,该错误似乎并不影响实际的硬件,但仅限于MAME系统中的仿真。当被问及他的错误发现时,迈克尔说,“I将与MAME团队合作修复MAME。实际上,它对真正的硬件影响不大。不过,我有解决方法。

有趣的是,迈克尔也是 ROM 04x / ROM 05x项目 为了追求最终的Apple IIc,Apple II社区的一些成员实施了该工具。

有关此项目和Michael的其他作品的更多信息,请查看他的主要博客,网址为:
http://apple2.guidero.us/doku.php?id=start

请关注并喜欢我们:

关于作者

比尔·马滕斯

苹果。董事会主席兼俱乐部主席-Bill为创始人Val J.Golding和A.P.P.L.E.工作从1981年到1982年。1999年,他开始对A.P.P.L.E.分发和出售的材料进行存档。 Bill曾在东京从事金融行业,并以他的名字从事过20多个大型办公基础设施项目。 2001年3月,他退休,写书,花更多时间追求个人兴趣。作为用户组的总裁,Bill负责杂志的发行以及该网站的组织。比尔目前居住在日本东京和华盛顿州谢尔顿,两地之间的时间不一样。