From d534aa41d53b8b286511374c6934c061860625b3 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Mon, 11 May 2020 09:47:30 -0700 Subject: [PATCH] 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. --- Source/Apps/Assign.asm | 22 +++++++++++++++++++++- Source/CPM3/diskio.z80 | 7 ++++--- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Source/Apps/Assign.asm b/Source/Apps/Assign.asm index 4e1606b4..c6214c65 100644 --- a/Source/Apps/Assign.asm +++ b/Source/Apps/Assign.asm @@ -25,6 +25,7 @@ ; 2019-12-24 [WBW] Fixed location of BIOS save area\ ; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes) ; 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: @@ -777,6 +778,10 @@ instc2: inc hl ; bump to slice field of DPH field ld a,(de) ; get slice from mapwrk 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 ; ... inc de ; ... @@ -800,6 +805,16 @@ instc3: add hl,de ; HL := SELMEM func ld a,1 ; bank 1 is tpa bank 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 ; @@ -1828,6 +1843,11 @@ heaplim .dw 0 ; heap limit address ; 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 ; devtbl: ; device table @@ -1872,7 +1892,7 @@ stack .equ $ ; stack top ; Messages ; 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 msgub .db " (UBIOS Mode)",0 msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3",0 diff --git a/Source/CPM3/diskio.z80 b/Source/CPM3/diskio.z80 index ec3ff124..1856eefa 100644 --- a/Source/CPM3/diskio.z80 +++ b/Source/CPM3/diskio.z80 @@ -195,7 +195,8 @@ dpb$max: dw 1024 - 1 ; drm: dir entries - 1 db 11111111b ; al0: dir blk bit map, first 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 db 2 ; psh: 2 for 512 byte sectors 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 db 11110000b ; al0: dir blk bit map, first 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 db 2 ; psh: 2 for 512 byte sectors db 3 ; phm: (512 / 128) - 1 @@ -337,7 +338,7 @@ dpb$hdnew: ; 8MB Hard Disk Drive (new format) dw 1024 - 1 ; drm: dir entries db 11111111b ; al0: dir blk bit map, first 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 db 2 ; psh: 2 for 512 byte sectors db 3 ; phm: (512 / 128) - 1 diff --git a/Source/ver.inc b/Source/ver.inc index ffc685e4..86655b37 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.6" +#DEFINE BIOSVER "3.1.1-pre.7" diff --git a/Source/ver.lib b/Source/ver.lib index e55d2ae6..ee5204d5 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.6" + db "3.1.1-pre.7" endm