DeskTop: Avoid frequent STATUS calls on Laser 128. Maybe fixes #138

Also adjust double-click timing on Laser 128, assuming acceleration.
This commit is contained in:
Joshua Bell 2019-03-17 15:34:18 -07:00
parent b257e03fae
commit 2905a5c930
4 changed files with 30 additions and 3 deletions

View File

@ -79,6 +79,7 @@ file, then select the appropriate command from the Apple menu.
* Sort Directory: don't need to click before sorting. (#17)
* Hardware/Emulator Specific:
* IIc Plus: don't spin slot 5 drives constantly. (Use Special > Check Drive) (#25)
* Laser 128: avoid hangs checking SmartPort status. (Use Special > Check Drive) (#138)
* IIgs: color DHR is re-enabled on exit. (#43)
* Macintosh LC IIe Option Card: don't crash on startup. (#93)
* Macintosh LC IIe Option Card: correct problems with interrupts affecting AppleTalk. (#129)

View File

@ -646,6 +646,8 @@ L44A6: MGTK_RELAY_CALL MGTK::SelectWindow, findwindow_window_id
;;; ============================================================
;;; TODO: Move this to init block, since it isn't needed afterwards
.proc initialize_disks_in_devices_tables
ldx #0
ldy DEVCNT
@ -677,6 +679,15 @@ append: lda DEVLST,y ; add it to the list
and #%01110000 ; mask off slot
cmp #$50 ; is it slot 5?
beq next ; if so, ignore
;; Don't issue STATUS calls to Laser 128 Slot 7 firmware, as it causes
;; hangs in some cases. https://github.com/inexorabletash/a2d/issues/138
: bit is_laser128_flag
bpl :+
and #%01110000 ; mask off slot
cmp #$70 ; is it slot 7?
beq next ; if so, ignore
: lda DEVLST,y
inx
@ -15366,7 +15377,7 @@ str_preview_txt:
;;; Segment loaded into MAIN $800-$FFF
;;; ============================================================
;;; Appears to be init sequence - machine identification, etc
;;; Init sequence - machine identification, etc
.proc desktop_800
@ -15393,6 +15404,7 @@ start:
copy ID_BYTE_FBB3, id_FBB3 ; $06 = IIe or later
copy ID_BYTE_FBC0, id_FBC0 ; $00 = IIc or later
copy ID_BYTE_FBBF, id_FBBF ; IIc ROM version (IIc+ = $05)
copy ID_BYTE_FB1E, id_FB1E ; $AC = Laser 128
;; ... and page in LCBANK1
sta ALTZPON
@ -15412,20 +15424,29 @@ start:
;; Identify machine type (double-click timer, other flags)
copy #0, is_iic_plus_flag
copy #0, is_laser128_flag
lda id_FBC0
beq is_iic ; $FBC0 = $00 -> is IIc or IIc+
bit iigs_flag
bmi is_iigs
;; IIe (or IIe Option Card, or Laser 128)
copy #$96, machine_type ; IIe
jmp end
lda id_FB1E ; Is it a Laser 128?
cmp #$AC
bne :+
copy #$80, is_laser128_flag
copy #$FD, machine_type ; Assume accelerated?
: jmp end
;; IIgs
is_iigs:
copy #$FD, machine_type ; IIgs
jmp end
;; IIc or IIc+
is_iic: copy #$FA, machine_type ; IIc
lda id_FBBF ; ROM version
cmp #$05 ; IIc Plus = $05
@ -15436,6 +15457,7 @@ is_iic: copy #$FA, machine_type ; IIc
iigs_flag: ; High bit set if IIgs detected.
.byte 0
id_FB1E: .byte 0
id_FBB3: .byte 0
id_FBC0: .byte 0
id_FBBF: .byte 0

View File

@ -816,6 +816,9 @@ str_clock:
is_iic_plus_flag:
.byte 0
is_laser128_flag:
.byte 0
;;; ============================================================
;;; 5.25" Floppy Disk

View File

@ -61,6 +61,7 @@ F8VERSION := $06
;;; Miscellaneous
IRQ_VECTOR := $3FE
ID_BYTE_FB1E := $FB1E ; $AC = Laser 128
ID_BYTE_FBB3 := $FBB3 ; $06 = IIe or later
ID_BYTE_FBC0 := $FBC0 ; $EA = IIe, $E0 = IIe enh/IIgs, $00 = IIc/IIc+
ID_BYTE_FBBF := $FBBF ; IIc ROM version ($05 = IIc+)