Browse Source

Fix CPM3/ZPM3 Disk Reassignment Issue

- Improve the behavior of the ASSIGN command to notify CPM3/ZPM3 BDOS of disk change when a drive is reassigned.
pull/127/head
Wayne Warthen 6 years ago
parent
commit
d534aa41d5
  1. 22
      Source/Apps/Assign.asm
  2. 7
      Source/CPM3/diskio.z80
  3. 2
      Source/ver.inc
  4. 2
      Source/ver.lib

22
Source/Apps/Assign.asm

@ -25,6 +25,7 @@
; 2019-12-24 [WBW] Fixed location of BIOS save area\ ; 2019-12-24 [WBW] Fixed location of BIOS save area\
; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes) ; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes)
; 2020-05-06 [WBW] Add patch level to version compare ; 2020-05-06 [WBW] Add patch level to version compare
; 2020-05-10 [WBW] Set media change flag in XDPH for CP/M 3
;_______________________________________________________________________________ ;_______________________________________________________________________________
; ;
; ToDo: ; ToDo:
@ -777,6 +778,10 @@ instc2:
inc hl ; bump to slice field of DPH field inc hl ; bump to slice field of DPH field
ld a,(de) ; get slice from mapwrk ld a,(de) ; get slice from mapwrk
ld (hl),a ; put slice into DPH field ld (hl),a ; put slice into DPH field
ld a,11 ; media byte is 11 bytes ahead
call addhl ; bump HL to media byte adr
or $FF ; use $FF to signify media change
ld (hl),a ; set media flag byte
inc de ; bump to next mapwrk entry inc de ; bump to next mapwrk entry
inc de ; ... inc de ; ...
inc de ; ... inc de ; ...
@ -800,6 +805,16 @@ instc3:
add hl,de ; HL := SELMEM func add hl,de ; HL := SELMEM func
ld a,1 ; bank 1 is tpa bank ld a,1 ; bank 1 is tpa bank
call jphl call jphl
;
; set SCB drive door open flag
ld a,$54 ; SCB drive door opened flag
ld (scboff),a ; set offset parm
or $FF ; SCB operation, $FF = set
ld (scbop),a ; set operation parm
ld (scbval),a ; set value parm to $FF
ld c,$31 ; get/set system control block
ld de,scbpb ; scb parameter block adr
call bdos
; ;
call drvrst ; perform BDOS drive reset call drvrst ; perform BDOS drive reset
; ;
@ -1828,6 +1843,11 @@ heaplim .dw 0 ; heap limit address
; ;
dirbuf .dw 0 ; directory buffer location dirbuf .dw 0 ; directory buffer location
; ;
scbpb: ; BDOS SCB get/set parm block
scboff .db $54 ; media open door flag
scbop .db $FF ; set a byte
scbval .dw $FF ; value to set
;
mapwrk .fill (4 * 16),$FF ; working copy of drive map mapwrk .fill (4 * 16),$FF ; working copy of drive map
; ;
devtbl: ; device table devtbl: ; device table
@ -1872,7 +1892,7 @@ stack .equ $ ; stack top
; Messages ; Messages
; ;
indent .db " ",0 indent .db " ",0
msgban1 .db "ASSIGN v1.2 for RomWBW CP/M, 7-May-2020",0
msgban1 .db "ASSIGN v1.3 for RomWBW CP/M, 10-May-2020",0
msghb .db " (HBIOS Mode)",0 msghb .db " (HBIOS Mode)",0
msgub .db " (UBIOS Mode)",0 msgub .db " (UBIOS Mode)",0
msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3",0 msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3",0

7
Source/CPM3/diskio.z80

@ -195,7 +195,8 @@ dpb$max:
dw 1024 - 1 ; drm: dir entries - 1 dw 1024 - 1 ; drm: dir entries - 1
db 11111111b ; al0: dir blk bit map, first byte db 11111111b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 64 ; cks: directory check vector size - 256 / 4
;dw 64 ; cks: directory check vector size - 256 / 4
dw 256 ; cks: directory check vector size - 1024 / 4
dw 0 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k dw 0 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k
db 2 ; psh: 2 for 512 byte sectors db 2 ; psh: 2 for 512 byte sectors
db 3 ; phm: (512 / 128) - 1 db 3 ; phm: (512 / 128) - 1
@ -253,7 +254,7 @@ dpb$hd: ; 8MB Hard Disk Drive w/ 512 dir entries
dw 512 - 1 ; drm: dir entries - 1 = 512 - 1 = 511 dw 512 - 1 ; drm: dir entries - 1 = 512 - 1 = 511
db 11110000b ; al0: dir blk bit map, first byte db 11110000b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 8000h ; cks: directory check vector size - permanent storage = 8000H
dw 8080h ; cks: directory check vector size - permanent storage = 8000H
dw 16 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k dw 16 ; off: reserved tracks = 16 trks * (16 trks * 16 heads * 16 secs * 512 bytes) = 128k
db 2 ; psh: 2 for 512 byte sectors db 2 ; psh: 2 for 512 byte sectors
db 3 ; phm: (512 / 128) - 1 db 3 ; phm: (512 / 128) - 1
@ -337,7 +338,7 @@ dpb$hdnew: ; 8MB Hard Disk Drive (new format)
dw 1024 - 1 ; drm: dir entries dw 1024 - 1 ; drm: dir entries
db 11111111b ; al0: dir blk bit map, first byte db 11111111b ; al0: dir blk bit map, first byte
db 00000000b ; al1: dir blk bit map, second byte db 00000000b ; al1: dir blk bit map, second byte
dw 8000h ; cks: directory check vector size - permanent storage = 8000H
dw 8100h ; cks: directory check vector size - permanent storage = 8000H
dw 2 ; off: reserved tracks dw 2 ; off: reserved tracks
db 2 ; psh: 2 for 512 byte sectors db 2 ; psh: 2 for 512 byte sectors
db 3 ; phm: (512 / 128) - 1 db 3 ; phm: (512 / 128) - 1

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.6"
#DEFINE BIOSVER "3.1.1-pre.7"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.6"
db "3.1.1-pre.7"
endm endm

Loading…
Cancel
Save