Browse Source

Merge pull request #120 from wwarthen/dev

Dev
pull/124/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
1ba2d767a8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      .gitignore
  2. BIN
      Doc/Hard Disk Anatomy.pdf
  3. BIN
      Doc/SIO+CTC Baud Rate Options.pdf
  4. 18
      Source/Apps/Assign.asm
  5. 33
      Source/BPBIOS/diskdefs
  6. 259
      Source/CBIOS/cbios.asm
  7. 5
      Source/CPM3/bioskrnl.asm
  8. 4
      Source/CPM3/biosldr.z80
  9. 34
      Source/CPM3/diskio.z80
  10. BIN
      Source/Doc/Graphics/Hard Disk Anatomy.vsd
  11. BIN
      Source/Doc/SIO+CTC Baud Rate Options.xlsx
  12. 33
      Source/HBIOS/diskdefs
  13. 10
      Source/HBIOS/hdsk.asm
  14. 22
      Source/HBIOS/romldr.asm
  15. 46
      Source/Images/Build.cmd
  16. 1
      Source/Images/BuildDisk.cmd
  17. 59
      Source/Images/BuildDisk.ps1
  18. 1
      Source/Images/BuildFD.cmd
  19. 63
      Source/Images/BuildFD.ps1
  20. 1
      Source/Images/BuildHD.cmd
  21. 40
      Source/Images/BuildNew.cmd
  22. BIN
      Source/Images/Common/FDISK80.COM
  23. 79
      Source/Images/Makefile
  24. 33
      Source/Images/diskdefs
  25. BIN
      Source/Images/hdnew_prefix.bin
  26. BIN
      Source/RomDsk/ROM_1024KB/FDISK80.COM
  27. BIN
      Source/RomDsk/ROM_512KB/FDISK80.COM
  28. 34
      Source/UBIOS/ubios.inc
  29. 2
      Source/ver.inc
  30. 2
      Source/ver.lib
  31. 33
      Tools/cpmtools/diskdefs
  32. 4
      Tools/simh/Sim.cfg

1
.gitignore

@ -82,6 +82,7 @@ Tools/unix/zx/zx
!Source/BPBIOS/Z34RCP11/cledsave.com
!Source/Fonts
!Source/Images/**/*.[Cc][Oo][Mm]
!Source/Images/hdnew_prefix.bin
!Source/RomDsk/**/*.[Cc][Oo][Mm]
!Source/UBIOS/FSFAT.BIN
!Source/UBIOS/UNA-BIOS.BIN

BIN
Doc/Hard Disk Anatomy.pdf

Binary file not shown.

BIN
Doc/SIO+CTC Baud Rate Options.pdf

Binary file not shown.

18
Source/Apps/Assign.asm

@ -24,6 +24,7 @@
; 2019-11-17 [WBW] Added preliminary CP/M 3 support
; 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
;_______________________________________________________________________________
;
; ToDo:
@ -42,8 +43,7 @@ bdos .equ $0005 ; BDOS invocation vector
;
stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp
;
rmj .equ 3 ; CBIOS version - major
rmn .equ 1 ; CBIOS version - minor
#include "../ver.inc"
;
;===============================================================================
; Code Section
@ -119,10 +119,14 @@ init:
jp nz,errinv ; abort with invalid config block
inc hl ; next byte (major/minor version)
ld a,(hl) ; load it
cp rmj << 4 | rmn ; match?
cp RMJ << 4 | RMN ; match?
jp nz,errver ; abort with invalid os version
inc hl ; bump past
inc hl ; ... version info
inc hl ; next byte (update/patch)
ld a,(hl) ; load it
and $F0 ; eliminate patch num
cp RUP << 4 ; match?
jp nz,errver ; abort with invalid os version
inc hl ; bump past version info
;
; dereference HL to point to CBIOS extension data
ld a,(hl) ; dereference HL
@ -783,7 +787,7 @@ instc3:
push hl ; save drvtbl entry adr
push de ; save mapwrk entry adr
ld hl,(dphadr) ; get cur dph address
ld de,$23 ; size of xdph
ld de,$27 ; size of xdph
add hl,de ; bump to next dph
ld (dphadr),hl ; save it
pop de ; recover mapwrk entry adr
@ -1868,7 +1872,7 @@ stack .equ $ ; stack top
; Messages
;
indent .db " ",0
msgban1 .db "ASSIGN v1.1b for RomWBW CP/M, 29-Apr-2020",0
msgban1 .db "ASSIGN v1.2 for RomWBW CP/M, 7-May-2020",0
msghb .db " (HBIOS Mode)",0
msgub .db " (UBIOS Mode)",0
msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3",0

33
Source/BPBIOS/diskdefs

@ -345,8 +345,20 @@ diskdef wbw_fd120
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# Legacy format, 512 dir entries, 8,320 sectors / slice
# RomWBW 8320KB Hard Disk Slice
# Legacy format, 512 dir entries, 16,630 sectors / slice
diskdef wbw_hd
seclen 512
tracks 1040
sectrk 16
blocksize 4096
maxdir 512
skew 0
boottrk 16
os 2.2
end
# First 4 slices of wbw_hd
diskdef wbw_hd0
seclen 512
tracks 1040
@ -393,9 +405,9 @@ end
# RomWBW 8MB Hard Disk
# New format, 1024 dir entries, 8,192 sectors / slice
# New format, 1024 dir entries, 16,384 sectors / slice
# Pure filesystem image, no prefix
diskdef wbw_hd_new
diskdef wbw_hdnew
seclen 512
tracks 1024
sectrk 16
@ -406,10 +418,9 @@ diskdef wbw_hd_new
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# New format, 1024 dir entries, 8,192 sectors / slice
# Assumes 256 sector (16 track) hard disk prefix
diskdef wbw_hd0_new
# First 4 slices of wbw_hdnew
# Assumes 128KB prefix (256 sectors)
diskdef wbw_hdnew0
seclen 512
tracks 1040
sectrk 16
@ -420,7 +431,7 @@ diskdef wbw_hd0_new
os 2.2
end
diskdef wbw_hd1_new
diskdef wbw_hdnew1
seclen 512
tracks 2064
sectrk 16
@ -431,7 +442,7 @@ diskdef wbw_hd1_new
os 2.2
end
diskdef wbw_hd2_new
diskdef wbw_hdnew2
seclen 512
tracks 3112
sectrk 16
@ -442,7 +453,7 @@ diskdef wbw_hd2_new
os 2.2
end
diskdef wbw_hd3_new
diskdef wbw_hdnew3
seclen 512
tracks 4136
sectrk 16

259
Source/CBIOS/cbios.asm

@ -471,8 +471,6 @@ GOMON:
;==================================================================================================
;
;__________________________________________________________________________________________________
;
;__________________________________________________________________________________________________
CONST:
; CONSOLE STATUS, RETURN $FF IF CHARACTER READY, $00 IF NOT
;
@ -1223,13 +1221,38 @@ DSK_SELECT:
;
; RESTORE DE TO BC (FOR ACCESS TO DRIVE LOGIN BIT)
POP BC ; GET ORIGINAL E INTO B
;
#IFDEF PLTWBW
;
; CHECK IF THIS IS LOGIN, IF NOT, BYPASS MEDIA DETECTION
; FIX: WHAT IF PREVIOUS MEDIA DETECTION FAILED???
BIT 0,B ; TEST DRIVE LOGIN BIT
JR NZ,DSK_SELECT2 ; BYPASS MEDIA DETECTION
;
#IFDEF PLTUNA
;
LD A,(SEKUNIT) ; GET DISK UNIT
LD B,A ; UNIT NUM TO B
LD C,$48 ; UNA FUNC: GET DISK TYPE
CALL $FFFD ; CALL UNA
LD A,D ; MOVE DISK TYPE TO A
CP $40 ; RAM/ROM DRIVE?
JR Z,DSK_SELECT1 ; HANDLE RAM/ROM DRIVE
LD A,MID_HD ; OTHERWISE WE HAVE A HARD DISK
JR DSK_SELECT1A ; DONE
;
DSK_SELECT1:
; UNA RAM/ROM DRIVE
LD C,$45 ; UNA FUNC: GET DISK INFO
LD DE,(DSKBUF) ; 512 BYTE BUFFER
CALL $FFFD ; CALL UNA
BIT 7,B ; TEST RAM DRIVE BIT
LD A,MID_MDROM ; ASSUME ROM
JR Z,DSK_SELECT1A ; IS ROM, DONE
LD A,MID_MDRAM ; MSUT BE RAM
;
DSK_SELECT1A:
LD (MEDID),A
;
#ELSE
;
; DETERMINE MEDIA IN DRIVE
LD A,(SEKUNIT) ; GET UNIT
@ -1242,6 +1265,8 @@ DSK_SELECT:
OR A ; SET FLAGS
LD HL,0 ; ASSUME FAILURE
RET Z ; BAIL OUT IF NO MEDIA
;
#ENDIF
;
; CLEAR LBA OFFSET (DWORD)
LD HL,0 ; ZERO
@ -1286,8 +1311,6 @@ DSK_SELECT:
LD BC,4 ; 4 BYTES
LDIR ; DO IT
;
#ENDIF
;
DSK_SELECT2:
LD HL,(SEKDPH) ; HL = DPH ADDRESS FOR CP/M
XOR A ; FLAG SUCCESS
@ -1298,15 +1321,32 @@ DSK_SELECT2:
; UPDATE THE PARTITION OFFSET (LBAOFF) AND UPDATE
; THE MEDIA ID (MEDID).
;
#IFDEF PLTWBW
;
DSK_MBR:
; CHECK MEDIA TYPE, ONLY HARD DISK IS APPLICABLE
LD A,(MEDID) ; GET MEDIA ID
CP MID_HD ; HARD DISK?
JR Z,DSK_MBR1 ; IF SO, CONTINUE
JR Z,DSK_MBR0 ; IF SO, CONTINUE
XOR A ; ELSE, N/A, SIGNAL SUCCESS
RET ; AND RETURN
DSK_MBR0:
;
#IFDEF PLTWBW
; SWITCH TO BIOS BANK TO ACCESS DISK BUFFER
LD A,(HB_CURBNK) ; GET CUR BANK
PUSH AF ; SAVE CUR BANK
LD A,(BNKBIOS) ; BIOS BANK
CALL HB_BNKSEL ; DO IT
CALL DSK_MBR1 ; DO THE WORK
; RESTORE BANK
PUSH AF ; SAVE RESULT
POP HL ; TO HL
EX (SP),HL ; RESULT TO TOS, PREV BANK TO H
LD A,H ; PREV BANK TO A
CALL HB_BNKSEL ; SELECT IT
POP AF ; ORIGINAL RESULT BACK
RET
#ENDIF
;
DSK_MBR1:
; FLUSH DSKBUF TO MAKE SURE IT IS SAFE TO USE IT.
@ -1320,14 +1360,11 @@ DSK_MBR1:
LD C,A ; PUT IN C
LD DE,0 ; LBA SECTOR ZERO
LD HL,0 ; ...
#IFDEF PLTWBW
SET 7,D ; MAKE SURE LBA ACCESS BIT SET
#ENDIF
CALL DSK_IO2 ; DO IT
RET NZ ; ABORT ON ERROR
;
; SWITCH TO BIOS BANK TO ACCESS DISK BUFFER
LD A,(HB_CURBNK) ; GET CUR BANK
PUSH AF ; SAVE CUR BANK
LD A,(BNKBIOS) ; BIOS BANK
CALL HB_BNKSEL ; DO IT
;
; CHECK SIGNATURE
LD HL,(DSKBUF) ; DSKBUF ADR
@ -1335,11 +1372,11 @@ DSK_MBR1:
ADD HL,DE ; POINT TO SIGNATURE
LD A,(HL) ; GET FIRST BYTE
CP $55 ; CHECK FIRST BYTE
JR NZ,DSK_MBR4 ; NO MATCH, NO PART TABLE
JR NZ,DSK_MBR5 ; NO MATCH, NO PART TABLE
INC HL ; NEXT BYTE
LD A,(HL) ; GET SECOND BYTE
CP $AA ; CHECK SECOND BYTE
JR NZ,DSK_MBR4 ; NO MATCH, NO PART TABLE, ABORT
JR NZ,DSK_MBR5 ; NO MATCH, NO PART TABLE, ABORT
;
; TRY TO FIND OUR ENTRY IN PART TABLE AND CAPTURE LBA OFFSET
LD B,4 ; FOUR ENTRIES IN PART TABLE
@ -1348,19 +1385,16 @@ DSK_MBR1:
ADD HL,DE ; POINT TO IT
DSK_MBR2:
LD A,(HL) ; GET PART TYPE
CP $52 ; CP/M PARTITION?
CP $2E ; CP/M PARTITION?
JR Z,DSK_MBR3 ; COOL, GRAB THE LBA OFFSET
LD DE,16 ; PART TABLE ENTRY SIZE
ADD HL,DE ; BUMP TO NEXT ENTRY PART TYPE
DJNZ DSK_MBR2 ; LOOP THRU TABLE
JR DSK_MBR4 ; TOO BAD, NO CP/M PARTITION
JR DSK_MBR5 ; TOO BAD, NO CP/M PARTITION
;
DSK_MBR3:
; WE HAVE LOCATED A VALID CP/M PARTITION
; HL POINTS TO PART TYPE FIELD OF PART ENTRY
; UPDATE MEDIA ID
LD A,MID_HDNEW ; NEW MEDIA ID
LD (MEDID),A ; SAVE IT
;
; CAPTURE THE LBA OFFSET
LD DE,4 ; LBA IS 4 BYTES AFTER PART TYPE
@ -1368,14 +1402,39 @@ DSK_MBR3:
LD DE,SEKLBA ; LOC TO STORE LBA OFFSET
LD BC,4 ; 4 BYTES (32 BITS)
LDIR ; COPY IT
;
; CHECK THAT REQUESTED SLICE IS "INSIDE" PARTITION
; SLICE SIZE IS EXACTLY 16,384 SECTORS (8MB), SO WE CAN JUST
; RIGHT SHIFT PARTITION SECTOR COUNT BY 14 BITS
LD E,(HL) ; HL POINTS TO FIRST BYTE
INC HL ; ... OF 32 BIT PARTITION
LD D,(HL) ; ... SECTOR COUNT,
INC HL ; ... LOAD SECTOR COUNT
PUSH DE ; ... INTO DE:HL
LD E,(HL) ; ...
INC HL ; ...
LD D,(HL) ; ...
POP HL ; ... DE:HL = PART SIZE IN SECTORS
LD B,2 ; DE = DE:HL >> 2 (TRICKY!)
CALL RL32 ; DE = SLICECNT
EX DE,HL ; HL = SLICECNT
LD A,(SLICE) ; GET TARGET SLICE
LD C,A ; PUT IN C
LD B,0 ; BC := REQUESTED SLICE #
SCF ; SET CARRY!
SBC HL,BC ; MAX SLICES - SLICE - 1
JR NC,DSK_MBR4 ; NO OVERFLOW, OK TO CONTINUE
OR $FF ; SLICE TOO HIGH, SIGNAL ERROR
RET ; AND BAIL OUT
;
DSK_MBR4:
; IF BOOT FROM PARTITION, USE NEW SECTORS PER SLICE VALUE
LD HL,16384 ; NEW SECTORS PER SLICE
LD (SPS),HL ; SAVE IT
;
DSK_MBR4:
; RESTORE BANK
POP AF ; GET PREV BANK
CALL HB_BNKSEL ; SELECT IT
; UPDATE MEDIA ID
LD A,MID_HDNEW ; NEW MEDIA ID
LD (MEDID),A ; SAVE IT
;
DSK_MBR5:
; ADJUST LBA OFFSET BASED ON TARGET SLICE
@ -1383,68 +1442,22 @@ DSK_MBR5:
LD HL,(SEKLBA) ; SET DE:HL
LD DE,(SEKLBA+2) ; ... TO STARTING LBA
LD BC,(SPS) ; SECTORS PER SLICE
BOOT6:
DSK_MBR6:
OR A ; SET FLAGS TO CHECK LOOP CNTR
JR Z,BOOT8 ; DONE IF COUNTER EXHAUSTED
JR Z,DSK_MBR8 ; DONE IF COUNTER EXHAUSTED
ADD HL,BC ; ADD ONE SLICE TO LOW WORD
JR NC,BOOT7 ; CHECK FOR CARRY
JR NC,DSK_MBR7 ; CHECK FOR CARRY
INC DE ; IF SO, BUMP HIGH WORD
BOOT7:
DSK_MBR7:
DEC A ; DEC LOOP DOWNCOUNTER
JR BOOT6 ; AND LOOP
BOOT8:
JR DSK_MBR6 ; AND LOOP
DSK_MBR8:
; RESAVE IT
LD (SEKLBA),HL ; LOWORD
LD (SEKLBA+2),DE ; HIWORD
; SUCCESSFUL FINISH
XOR A ; SUCCESS
RET ; DONE
; ; DIFFERENT ALGORITHM FOR NEW HD FORMAT
; LD A,(MEDID) ; GET MEDIA ID
; CP MID_HDNEW ; NEW FORMAT?
; JR Z,DSK_MBR6 ; IF SO, GO THERE
;;
; ; OLD HD FORMAT, 65 TRACKS PER SLICE
; LD A,(SLICE) ; GET SLICE
; LD E,A ; E = SLICE NO
; LD H,65 ; H = TRACKS PER SLICE
; CALL MULT8 ; HL := H * E (TOTAL TRACK OFFSET)
; LD DE,0 ; CLEAR HI WORD
; LD B,8 ; 16 SPT, SHIFT 4 BITS
; CALL RL32 ; DO IT
; JR DSK_MBR7 ; DONE
;;
;DSK_MBR6:
; ; NEW HD FORMAT, MULTIPLY SLICE BY 8MB
; LD DE,0 ; CLEAR HIWORD
; LD H,0 ; CLEAR HI BYTE OR LOWORD
; LD A,(SLICE) ; GET SLICE
; LD L,A ; PUT SLICE IN LOW BYTE
; LD B,14
; CALL RL32 ; MULTIPLY BY 16384 SECTORS (8MB)
;;
;DSK_MBR7:
; ; ADD IN LBA OFFSET
; LD BC,(SEKLBA) ; LBA OFFSET LOWORD
; ADD HL,BC
; EX DE,HL
; LD BC,(SEKLBA+2) ; LBA OFFSET HIWORD
; ADC HL,BC
; EX DE,HL
; SET 7,D ; SET LBA ACCESS BIT
; ; RESAVE IT
; LD (SEKLBA),HL ; LOWORD
; LD (SEKLBA+2),DE ; HIWORD
; ; SUCCESSFUL FINISH
; XOR A ; SUCCESS
; RET ; DONE
;
#ENDIF
;
;
;
@ -1480,54 +1493,12 @@ DSK_WRITE:
;
;
;
#IFDEF PLTUNA
;
DSK_IO:
PUSH BC
LD DE,(HSTTRK) ; GET TRACK INTO HL
LD B,4 ; PREPARE TO LEFT SHIFT BY 4 BITS
DSK_IO1:
SLA E ; SHIFT DE LEFT BY 4 BITS
RL D
DJNZ DSK_IO1 ; LOOP TILL ALL BITS DONE
LD A,(HSTSEC) ; GET THE SECTOR INTO A
AND $0F ; GET RID OF TOP NIBBLE
OR E ; COMBINE WITH E
LD E,A ; BACK IN E
LD HL,0 ; HL:DE NOW HAS SLICE RELATIVE LBA
; APPLY OFFSET NOW
; OFFSET IS EXPRESSED AS NUMBER OF BLOCKS * 256 TO OFFSET!
LD A,(HSTOFF) ; LSB OF SLICE OFFSET TO A
ADD A,D ; ADD WITH D
LD D,A ; PUT IT BACK IN D
LD A,(HSTOFF+1) ; MSB OF SLICE OFFSET TO A
CALL ADCHLA ; ADD OFFSET
POP BC ; RECOVER FUNCTION IN B
LD A,(HSTUNIT) ; GET THE UNIT VALUE
LD C,A ; PUT IT IN C
; DISPATCH TO DRIVER
PUSH BC
EX DE,HL ; DE:HL NOW HAS LBA
LD B,C ; UNIT TO B
LD C,$41 ; UNA SET LBA
RST 08 ; CALL UNA
CALL NZ,PANIC
POP BC ; RECOVER B=FUNC, C=UNIT
LD E,C ; UNIT TO E
LD C,B ; FUNC TO C
LD B,E ; UNIT TO B
LD DE,(DSKBUF) ; SET BUFFER ADDRESS
LD HL,1 ; 1 SECTOR
; DISPATCH TO UBIOS
RST 08
OR A ; SET FLAGS BASED ON RESULT
RET
;
#ELSE
;
DSK_IO:
LD A,(HSTUNIT) ; GET UNIT
LD C,A ; UNIT -> C
;
#IFDEF PLTWBW
;
PUSH BC ; SAVE FUNC/UNIT
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO
RST 08 ; GET UNIT INFO, DEVICE TYPE IN D
@ -1549,9 +1520,9 @@ DSK_IO:
RL D ; CARRY BIT (HEAD) INTO D
JR DSK_IO2 ; DO THE DISK I/O
;
#ENDIF
;
LBA_IO:
LD A,(HSTUNIT) ; GET THE UNIT VALUE
LD C,A ; PUT IT IN C
PUSH BC ; SAVE FUNC/UNIT
; GET TRACK AND SHIFT TO MAKE ROOM FOR 4 BIT SECTOR VALUE
LD HL,(HSTTRK) ; GET TRACK
@ -1569,16 +1540,42 @@ LBA_IO:
LD BC,(HSTLBA+2) ; LBA OFFSET HIWORD
ADC HL,BC
EX DE,HL
#IFDEF PLTWBW
SET 7,D ; MAKE SURE LBA ACCESS BIT SET
#ENDIF
POP BC ; RESTORE FUNC/UNIT
;JR DSK_IO2 ; DO THE DISK I/O (FALL THRU)
;
#IFDEF PLTUNA
;
; MAKE UNA UBIOS CALL
; HBIOS FUNC SHOULD STILL BE IN B
; UNIT SHOULD STILL BE IN C
;
DSK_IO2:
PUSH BC ; SAVE INCOMING FUNCTION, UNIT
LD B,C ; UNIT TO B
LD C,$41 ; UNA SET LBA
RST 08 ; CALL UNA
POP BC ; RECOVER B=FUNC, C=UNIT
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A
LD E,C ; UNIT TO E
LD C,B ; FUNC TO C
LD B,E ; UNIT TO B
LD DE,(DSKBUF) ; SET BUFFER ADDRESS
LD HL,1 ; 1 SECTOR
; DISPATCH TO UBIOS
RST 08 ; CALL UNA
RET ; DONE
;
#ELSE
;
; MAKE HBIOS CALL
; HBIOS FUNC SHOULD STILL BE IN B
; UNIT SHOULD STILL BE IN C
;
DSK_IO2:
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT
PUSH BC ; SAVE INCOMING FUNCTION, UNIT
LD B,BF_DIOSEEK ; SETUP FOR NEW SEEK CALL
RST 08 ; DO IT
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT
@ -1587,7 +1584,6 @@ DSK_IO2:
LD A,(BNKBIOS) ; GET BIOS BANK
LD D,A ; TRANSFER TO/FROM BIOS BANK
LD E,1 ; TRANSFER ONE SECTOR
;CALL PC_ASTERISK ; *DEBUG*
RST 08 ; DO IT
OR A ; SET FLAGS
RET ; DONE
@ -1820,7 +1816,7 @@ DPB_ROM:
;
; RAM DISK: 64 SECS/TRK, 128 BYTES/SEC
; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256
; RAM DISK SIZE = TOTAL RAM - 128K RESERVED FOR SYSTEM USE
; RAM DISK SIZE = TOTAL RAM - 256K RESERVED FOR SYSTEM USE
;
; ALS_RAM, EXM, DSM MUST BE FILLED DYNAMICALLY:
; - ALS_RAM := (BANKS * 2)
@ -1837,7 +1833,7 @@ DPB_RAM:
.DB 4 ; BSH: BLOCK SHIFT FACTOR
.DB 15 ; BLM: BLOCK MASK
.DB 1 ; EXM: (BLKS <= 256) ? 1 : 0
.DW 192 - 1 ; DSM: TOTAL STORAGE IN BLOCKS - 1
.DW 128 - 1 ; DSM: TOTAL STORAGE IN BLOCKS - 1
.DW 255 ; DRM: DIR ENTRIES - 1 = 255
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE
@ -2343,10 +2339,12 @@ MD_INIT:
;
#IFDEF PLTWBW
LD A,(HCB + HCB_ROMBANKS) ; ROM BANK COUNT
SUB 4 ; REDUCE BANK COUNT BY RESERVED PAGES
LD IX,DPB_ROM ; ADDRESS OF DPB
CALL MD_INIT1 ; FIX IT UP
;
LD A,(HCB + HCB_RAMBANKS) ; RAM BANK COUNT
SUB 8 ; REDUCE BANK COUNT BY RESERVED PAGES
LD IX,DPB_RAM ; ADDRESS OF DPB
CALL MD_INIT1 ; FIX IT UP
;
@ -2355,7 +2353,6 @@ MD_INIT:
MD_INIT1:
;
; PUT USABLE BANK COUNT IN HL
SUB 4 ; REDUCE BANK COUNT BY RESERVED PAGES
LD L,A ; PUT IN LSB OF HL
LD H,0 ; MSB IS ALWAYS ZERO
;

5
Source/CPM3/bioskrnl.asm

@ -507,6 +507,11 @@ seldsk:
mov a,m ! inx h ! mov h,m ! mov l,a ; get address of LOGIN routine
call ipchl ; call LOGIN
pop h ; recover DPH pointer
; WBW Start
ora a
rz ; successful return
lxi h,0 ; error occurred, clear HL
; WBW End
not$first$select:
ret

4
Source/CPM3/biosldr.z80

@ -182,12 +182,12 @@ boot2:
cp 0AAh ; should be $AA
jr nz,boot5 ; if not, no part table
; Search part table for CP/M entry (type 0x52)
; Search part table for CP/M entry (type 0x2E)
ld b,4 ; four entries in part table
ld hl,mbrsec+1BEh+4 ; offset of first part type
boot3:
ld a,(hl) ; get part type
cp 52h ; CP/M partition?
cp 2Eh ; CP/M partition?
jr z,boot4 ; cool, grab the LBA offset
ld de,16 ; part table entry size
add hl,de ; bump to next part type

34
Source/CPM3/diskio.z80

@ -442,7 +442,7 @@ media:
; If not hard disk, skip partition & slice stuff
ld a,(medid) ; get media id
cp 4 ; hard disk?
jr nz,media9 ; if not, jump ahead
jp nz,media9 ; if not, jump ahead
; Read MBR
ld de,8000h ; LBA address zero
@ -454,7 +454,8 @@ media:
ld a,(unit) ; get bootunit
ld c,a ; put in C
ld b,013h ; HBIOS func: disk read
call dsk$io ; do it, no return on err
call dsk$io ; do it
ret nz ; abort on error
; Check signature
ld hl,(mbrsec+1FEh) ; get signature
@ -465,12 +466,12 @@ media:
cp 0AAh ; should be $AA
jr nz,media5 ; if not, no part table
; Search part table for CP/M entry (type 0x52)
; Search part table for CP/M entry (type 0x2E)
ld b,4 ; four entries in part table
ld hl,mbrsec+1BEh+4 ; offset of first part type
media3:
ld a,(hl) ; get part type
cp 52h ; CP/M partition?
cp 2Eh ; CP/M partition?
jr z,media4 ; cool, grab the LBA offset
ld de,16 ; part table entry size
add hl,de ; bump to next part type
@ -484,6 +485,28 @@ media4:
ld de,lba ; loc to store lba offset
ld bc,4 ; 4 bytes (32 bits)
ldir ; copy it
; Check that requested slice is "inside" partition.
; Slice size is exactly 16,384 sectors (8mb), so we can just
; right shift partition sector count by 14 bits
ld e,(hl) ; HL points to first byte
inc hl ; ... of 32 bit partition
ld d,(hl) ; ... sector count,
inc hl ; ... load sector count
push de ; ... into DE:HL
ld e,(hl) ; ...
inc hl ; ...
ld d,(hl) ; ...
pop hl ; ... DE:HL = part size in sectors
ld b,2 ; DE = DE:HL >> 2 (tricky!)
call rl32 ; DE = slicecnt
ex de,hl ; HL = slicecnt
ld a,(slice) ; get target slice
ld c,a ; put in C
ld b,0 ; BC := requested slice #
scf ; set carry!
sbc hl,bc ; max slices - slice - 1
jp c,err_noslice ; slice too high, error exit
; For now, it is implied that a slice within a partition
; table will be in the "new" disk format. So, we now
@ -772,9 +795,6 @@ str_err_diskio db ", Disk I/O",0
str_err_sig db ", No system",0
str_err_api db ", API failure",0
;
;
;
retry$adr dw ?wboot ; error retry address
curdph dw 0 ; working dph value
medid db 0 ; working media id value

BIN
Source/Doc/Graphics/Hard Disk Anatomy.vsd

Binary file not shown.

BIN
Source/Doc/SIO+CTC Baud Rate Options.xlsx

Binary file not shown.

33
Source/HBIOS/diskdefs

@ -345,8 +345,20 @@ diskdef wbw_fd120
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# Legacy format, 512 dir entries, 8,320 sectors / slice
# RomWBW 8320KB Hard Disk Slice
# Legacy format, 512 dir entries, 16,630 sectors / slice
diskdef wbw_hd
seclen 512
tracks 1040
sectrk 16
blocksize 4096
maxdir 512
skew 0
boottrk 16
os 2.2
end
# First 4 slices of wbw_hd
diskdef wbw_hd0
seclen 512
tracks 1040
@ -393,9 +405,9 @@ end
# RomWBW 8MB Hard Disk
# New format, 1024 dir entries, 8,192 sectors / slice
# New format, 1024 dir entries, 16,384 sectors / slice
# Pure filesystem image, no prefix
diskdef wbw_hd_new
diskdef wbw_hdnew
seclen 512
tracks 1024
sectrk 16
@ -406,10 +418,9 @@ diskdef wbw_hd_new
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# New format, 1024 dir entries, 8,192 sectors / slice
# Assumes 256 sector (16 track) hard disk prefix
diskdef wbw_hd0_new
# First 4 slices of wbw_hdnew
# Assumes 128KB prefix (256 sectors)
diskdef wbw_hdnew0
seclen 512
tracks 1040
sectrk 16
@ -420,7 +431,7 @@ diskdef wbw_hd0_new
os 2.2
end
diskdef wbw_hd1_new
diskdef wbw_hdnew1
seclen 512
tracks 2064
sectrk 16
@ -431,7 +442,7 @@ diskdef wbw_hd1_new
os 2.2
end
diskdef wbw_hd2_new
diskdef wbw_hdnew2
seclen 512
tracks 3112
sectrk 16
@ -442,7 +453,7 @@ diskdef wbw_hd2_new
os 2.2
end
diskdef wbw_hd3_new
diskdef wbw_hdnew3
seclen 512
tracks 4136
sectrk 16

10
Source/HBIOS/hdsk.asm

@ -135,15 +135,11 @@ HDSK_RESET:
;
; GET DISK CAPACITY
; RETURN DE:HL=BLOCK COUNT, BC=BLOCK SIZE
; SLICE C/H/S = 65/16/16 OR 16,640 TOTAL SECTORS
; ASSUME 8 SLICES, SO 16640 X 8 = 133,120 TOTAL SECTORS
;
; 2048 TRKS X 16 HDS X 16 SPT = 524288 OR 80000H
; ASSUME 1GB MEDIA SIZE, SO 1GB / 512B
; IS $200000 SECTORS
;
HDSK_CAP:
;LD DE,133120 >> 16 ; BLOCK COUNT MSW
;LD HL,133120 & $FFFF ; BLOCK COUNT LSW
LD DE,8 ; BLOCK COUNT MSW
LD DE,$20 ; BLOCK COUNT MSW
LD HL,0 ; BLOCK COUNT LSW
LD BC,512 ; 512 BYTE SECTOR
XOR A ; SIGNAL SUCCESS

22
Source/HBIOS/romldr.asm

@ -123,7 +123,7 @@ start:
rst 08 ; do it
ld a,c ; previous bank to A
ld (bid_ldr),a ; save previous bank for later
cp BID_IMG0 ; starting from ROM?
bit 7,a ; starting from ROM?
#endif
;
#if (BIOS == BIOS_UNA)
@ -131,8 +131,7 @@ start:
ld de,BID_USR ; select user bank
rst 08 ; do it
ld (bid_ldr),de ; ... for later
ld a,d ; starting from ROM?
or e ; ... bank == 0?
bit 7,d ; starting from ROM?
#endif
;
; For app mode startup, use alternate table
@ -675,18 +674,23 @@ diskboot:
; If non-zero slice requested, confirm device can handle it
ld a,(bootslice) ; get slice
or a ; set flags
jr z,diskboot1 ; slice 0, skip slice check
jr z,diskboot0 ; slice 0, skip slice check
ld a,d ; disk type to A
cp $41 ; IDE?
jr z,diskboot1 ; if so, OK
jr z,diskboot0 ; if so, OK
cp $42 ; PPIDE?
jr z,diskboot1 ; if so, OK
jr z,diskboot0 ; if so, OK
cp $43 ; SD?
jr z,diskboot1 ; if so, OK
jr z,diskboot0 ; if so, OK
cp $44 ; DSD?
jr z,diskboot1 ; if so, OK
jr z,diskboot0 ; if so, OK
jp err_noslice ; no such slice, handle err
;
diskboot0:
; Below is wrong. It assumes we are booting from a hard
; disk, but it could also be a RAM/ROM disk. However, it is
; not actually possible to boot from those, so not gonna
; worry about this.
ld a,4 ; assume legacy hard disk
ld (mediaid),a ; save media id
;
@ -732,7 +736,7 @@ diskboot1:
ld hl,bl_mbrsec+$1BE+4 ; offset of first entry part type
diskboot2:
ld a,(hl) ; get part type
cp $52 ; cp/m partition?
cp $2E ; cp/m partition?
jr z,diskboot3 ; cool, grab the lba offset
ld de,16 ; part table entry size
add hl,de ; bump to next entry part type

46
Source/Images/Build.cmd

@ -4,25 +4,43 @@ setlocal
echo.
echo Building Floppy Disk Images...
echo.
call BuildFD.cmd cpm22 wbw_fd144 ..\cpm22\cpm_wbw.sys
call BuildFD.cmd zsdos wbw_fd144 ..\zsdos\zsys_wbw.sys
call BuildFD.cmd nzcom wbw_fd144 ..\zsdos\zsys_wbw.sys
call BuildFD.cmd cpm3 wbw_fd144 ..\cpm3\cpmldr.sys
call BuildFD.cmd zpm3 wbw_fd144 ..\cpm3\cpmldr.sys
call BuildFD.cmd ws4 wbw_fd144
call BuildDisk.cmd cpm22 wbw_fd144 ..\cpm22\cpm_wbw.sys
call BuildDisk.cmd zsdos wbw_fd144 ..\zsdos\zsys_wbw.sys
call BuildDisk.cmd nzcom wbw_fd144 ..\zsdos\zsys_wbw.sys
call BuildDisk.cmd cpm3 wbw_fd144 ..\cpm3\cpmldr.sys
call BuildDisk.cmd zpm3 wbw_fd144 ..\cpm3\cpmldr.sys
call BuildDisk.cmd ws4 wbw_fd144
echo.
echo Building Hard Disk Images...
echo Building Legacy Hard Disk Images...
echo.
call BuildHD.cmd cpm22 wbw_hd0 ..\cpm22\cpm_wbw.sys
call BuildHD.cmd zsdos wbw_hd0 ..\zsdos\zsys_wbw.sys
call BuildHD.cmd nzcom wbw_hd0 ..\zsdos\zsys_wbw.sys
call BuildHD.cmd cpm3 wbw_hd0 ..\cpm3\cpmldr.sys
call BuildHD.cmd zpm3 wbw_hd0 ..\cpm3\cpmldr.sys
call BuildHD.cmd ws4 wbw_hd0
call BuildDisk.cmd cpm22 wbw_hd ..\cpm22\cpm_wbw.sys
call BuildDisk.cmd zsdos wbw_hd ..\zsdos\zsys_wbw.sys
call BuildDisk.cmd nzcom wbw_hd ..\zsdos\zsys_wbw.sys
call BuildDisk.cmd cpm3 wbw_hd ..\cpm3\cpmldr.sys
call BuildDisk.cmd zpm3 wbw_hd ..\cpm3\cpmldr.sys
call BuildDisk.cmd ws4 wbw_hd
if exist ..\BPBIOS\bpbio-ww.rel call BuildHD.cmd bp wbw_hd
echo.
echo Building Combo Disk Image...
echo Building Combo Disk (legacy format) Image...
copy /b ..\..\Binary\hd_cpm22.img + ..\..\Binary\hd_zsdos.img + ..\..\Binary\hd_nzcom.img + ..\..\Binary\hd_cpm3.img + ..\..\Binary\hd_zpm3.img + ..\..\Binary\hd_ws4.img ..\..\Binary\hd_combo.img
echo.
echo Building New Hard Disk Images...
echo.
call BuildDisk.cmd cpm22 wbw_hdnew ..\cpm22\cpm_wbw.sys
call BuildDisk.cmd zsdos wbw_hdnew ..\zsdos\zsys_wbw.sys
call BuildDisk.cmd nzcom wbw_hdnew ..\zsdos\zsys_wbw.sys
call BuildDisk.cmd cpm3 wbw_hdnew ..\cpm3\cpmldr.sys
call BuildDisk.cmd zpm3 wbw_hdnew ..\cpm3\cpmldr.sys
call BuildDisk.cmd ws4 wbw_hdnew
if exist ..\BPBIOS\bpbio-ww.rel call BuildHD.cmd bp wbw_hdnew
copy hd_prefix.dat ..\..\Binary\
echo.
echo Building Combo Disk (new format) Image...
copy /b hdnew_prefix.bin + ..\..\Binary\hdnew_cpm22.img + ..\..\Binary\hdnew_zsdos.img + ..\..\Binary\hdnew_nzcom.img + ..\..\Binary\hdnew_cpm3.img + ..\..\Binary\hdnew_zpm3.img + ..\..\Binary\hdnew_ws4.img ..\..\Binary\hdnew_combo.img

1
Source/Images/BuildDisk.cmd

@ -0,0 +1 @@
@PowerShell -ExecutionPolicy Unrestricted .\BuildDisk.ps1 %*

59
Source/Images/BuildHD.ps1 → Source/Images/BuildDisk.ps1

@ -1,25 +1,46 @@
Param($Disk, $Format="wbw_hd_new", $SysFile="")
Param($Disk, $Format="", $SysFile="")
$ErrorAction = 'Stop'
if ($Format -like "*_new")
$CpmToolsPath = '../../Tools/cpmtools'
$env:PATH = $CpmToolsPath + ';' + $env:PATH
if ($Format.Length -eq 0)
{
# New hard disk format!!!
$MediaID = 10
$Size = 8 * 1MB
$ImgFile = "hd_${Disk}.bin"
Write-Error "No disk format specified!" -ErrorAction Stop
return
}
else
switch ($Format)
{
# Legacy hard disk format
$MediaID = 4
$Size = 8320KB
$ImgFile = "hd_${Disk}.img"
}
"wbw_fd144"
{
# 1.44MB Floppy Disk
$Desc = "1.44MB Floppy Disk"
$ImgFile = "fd144_${Disk}.img"
$MediaID = 6
$Size = 1440KB
}
$CpmToolsPath = '../../Tools/cpmtools'
"wbw_hd"
{
# Legacy Hard Disk Format
$Desc = "Hard Disk (legacy format)"
$ImgFile = "hd_${Disk}.img"
$MediaID = 4
$Size = 8MB + 128KB
}
$env:PATH = $CpmToolsPath + ';' + $env:PATH
"wbw_hdnew"
{
# New Hard Disk Format
$Desc = "Hard Disk (new format)"
$ImgFile = "hdnew_${Disk}.img"
$MediaID = 10
$Size = 8MB
}
}
if (-not (Test-Path("d_${Disk}/")))
{
@ -27,7 +48,7 @@ if (-not (Test-Path("d_${Disk}/")))
return
}
"Generating Hard Disk ${Disk}..."
"Generating $Desc $Disk..."
if ($SysFile.Length -gt 0)
{ [byte[]]$SysImg = [System.IO.File]::ReadAllBytes($SysFile) }
@ -36,10 +57,10 @@ else
$Image = ($SysImg + ([byte[]](0xE5) * ($Size - $SysImg.length)))
$Image[1410] = 0x4D
$Image[1411] = 0x49
$Image[1412] = 0x44
$Image[1413] = $MediaID
# $Image[1410] = 0x4D
# $Image[1411] = 0x49
# $Image[1412] = 0x44
# $Image[1413] = $MediaID
[System.IO.File]::WriteAllBytes($ImgFile, $Image)

1
Source/Images/BuildFD.cmd

@ -1 +0,0 @@
@PowerShell -ExecutionPolicy Unrestricted .\BuildFD.ps1 %*

63
Source/Images/BuildFD.ps1

@ -1,63 +0,0 @@
Param($Disk, $Format="wbw_fd144", $SysFile="")
$ErrorAction = 'Stop'
$ImgFile = "fd_${Disk}.img"
$MediaID = 6
$Size = 1440KB
$CpmToolsPath = '../../Tools/cpmtools'
$env:PATH = $CpmToolsPath + ';' + $env:PATH
if (-not (Test-Path("d_${Disk}/")))
{
Write-Error "Source directory d_${Disk} for disk ${Disk} not found!" -ErrorAction Stop
return
}
"Generating Floppy Disk ${Disk}..."
if ($SysFile.Length -gt 0)
{ [byte[]]$SysImg = [System.IO.File]::ReadAllBytes($SysFile) }
else
{ [byte[]]$SysImg = @() }
$Image = ($SysImg + ([byte[]](0xE5) * ($Size - $SysImg.length)))
$Image[1410] = 0x4D
$Image[1411] = 0x49
$Image[1412] = 0x44
$Image[1413] = $MediaID
[System.IO.File]::WriteAllBytes($ImgFile, $Image)
for ($Usr=0; $Usr -lt 16; $Usr++)
{
if (Test-Path ("d_${Disk}/u${Usr}/*"))
{
$Cmd = "cpmcp -f $Format $ImgFile d_${Disk}/u${Usr}/*.* ${Usr}:"
$Cmd
Invoke-Expression $Cmd
}
}
if (Test-Path("d_${Disk}.txt"))
{
foreach($Line in Get-Content "d_${Disk}.txt")
{
$Spec = $Line.Trim()
if (($Spec.Length -gt 0) -and ($Spec.Substring(0,1) -ne "#"))
{
$Cmd = "cpmcp -f $Format $ImgFile ${Spec}"
$Cmd
Invoke-Expression $Cmd
}
}
}
"Moving image $ImgFile into output directory..."
Move-Item $ImgFile -Destination "..\..\Binary\" -Force
return

1
Source/Images/BuildHD.cmd

@ -1 +0,0 @@
@PowerShell -ExecutionPolicy Unrestricted .\BuildHD.ps1 %*

40
Source/Images/BuildNew.cmd

@ -1,40 +0,0 @@
@echo off
setlocal
echo.
echo Building Floppy Disk Images...
echo.
call BuildFD.cmd cpm22 wbw_fd144 ..\cpm22\cpm_wbw.sys
call BuildFD.cmd zsdos wbw_fd144 ..\zsdos\zsys_wbw.sys
call BuildFD.cmd nzcom wbw_fd144 ..\zsdos\zsys_wbw.sys
call BuildFD.cmd cpm3 wbw_fd144 ..\cpm3\cpmldr.sys
call BuildFD.cmd zpm3 wbw_fd144 ..\cpm3\cpmldr.sys
call BuildFD.cmd ws4 wbw_fd144
echo.
echo Building Hard Disk Images...
echo.
call BuildHD.cmd cpm22 wbw_hd_new ..\cpm22\cpm_wbw.sys
call BuildHD.cmd zsdos wbw_hd_new ..\zsdos\zsys_wbw.sys
call BuildHD.cmd nzcom wbw_hd_new ..\zsdos\zsys_wbw.sys
call BuildHD.cmd cpm3 wbw_hd_new ..\cpm3\cpmldr.sys
call BuildHD.cmd zpm3 wbw_hd_new ..\cpm3\cpmldr.sys
call BuildHD.cmd ws4 wbw_hd_new
if exist ..\BPBIOS\bpbio-ww.rel call BuildHD.cmd bp wbw_hd_new
copy hd_prefix.dat ..\..\Binary\
echo.
echo Build Hard Disk Images...
copy /b hd_prefix.dat + ..\..\Binary\hd_cpm22.bin ..\..\Binary\hd_cpm22.img
copy /b hd_prefix.dat + ..\..\Binary\hd_zsdos.bin ..\..\Binary\hd_zsdos.img
copy /b hd_prefix.dat + ..\..\Binary\hd_nzcom.bin ..\..\Binary\hd_nzcom.img
copy /b hd_prefix.dat + ..\..\Binary\hd_cpm3.bin ..\..\Binary\hd_cpm3.img
copy /b hd_prefix.dat + ..\..\Binary\hd_zpm3.bin ..\..\Binary\hd_zpm3.img
copy /b hd_prefix.dat + ..\..\Binary\hd_ws4.bin ..\..\Binary\hd_ws4.img
if exist ..\..\Binary\hd_bp.bin copy /b hd_prefix.dat + ..\..\Binary\hd_bp.bin
echo.
echo Building Combo Disk Image...
copy /b hd_prefix.dat + ..\..\Binary\hd_cpm22.bin + ..\..\Binary\hd_zsdos.bin + ..\..\Binary\hd_nzcom.bin + ..\..\Binary\hd_cpm3.bin + ..\..\Binary\hd_zpm3.bin + ..\..\Binary\hd_ws4.bin ..\..\Binary\hd_combo.img

BIN
Source/Images/Common/FDISK80.COM

Binary file not shown.

79
Source/Images/Makefile

@ -1,26 +1,23 @@
#
# this makefile subsumes all the work done in Build.cmd, Build{Hd,Fd}.*
# this makefile subsumes all the work done in Build.cmd, BuildDisk.cmd, BuildDisk.ps1
#
SYSTEMS = ../CPM22/cpm_wbw.sys ../ZSDOS/zsys_wbw.sys ../CPM3/cpmldr.sys
FDIMGS = fd_cpm22.img fd_zsdos.img fd_nzcom.img \
fd_cpm3.img fd_zpm3.img fd_ws4.img
FDBIN = fd_cpm22.bin fd_zsdos.bin fd_nzcom.bin \
fd_cpm3.bin fd_zpm3.bin fd_ws4.bin
FDIMGS = fd144_cpm22.img fd144_zsdos.img fd144_nzcom.img \
fd144_cpm3.img fd144_zpm3.img fd144_ws4.img
HDIMGS = hd_cpm22.img hd_zsdos.img hd_nzcom.img \
hd_cpm3.img hd_zpm3.img hd_ws4.img
HDBIN = hd_cpm22.bin hd_zsdos.bin hd_nzcom.bin \
hd_cpm3.bin hd_zpm3.bin hd_ws4.bin
# HDIMGS += hd_bp.img
# HDBIN += hd_bp.bin
HDNEWIMGS = hdnew_cpm22.img hdnew_zsdos.img hdnew_nzcom.img \
hdnew_cpm3.img hdnew_zpm3.img hdnew_ws4.img
# HDNEWIMGS += hdnew_bp.img
HDPREFIX = # Legacy
#HDPREFIX = hd_prefix.dat # New
HDPREFIX =
HDNEWPREFIX = hdnew_prefix.bin
OBJECTS = $(FDIMGS) $(HDIMGS) hd_combo.img # Legacy
#OBJECTS = $(FDIMGS) $(HDIMGS) $(HDBIN) hd_combo.img # New
OBJECTS = $(FDIMGS) $(HDIMGS) hd_combo.img $(HDNEWIMGS) hdnew_combo.img
OTHERS = blank144 blankhd $(FDBIN) $(HDBIN)
OTHERS = blank144 blankhd blankhdnew
DEST=../../Binary
@ -29,7 +26,10 @@ include $(TOOLS)/Makefile.inc
DIFFPATH = $(DIFFTO)/Binary
hd_combo.img: $(HDPREFIX) $(HDBIN)
hd_combo.img: $(HDPREFIX) $(HDIMGS)
cat $^ > $@
hdnew_combo.img: $(HDNEWPREFIX) $(HDNEWIMGS)
cat $^ > $@
#
@ -47,35 +47,32 @@ blank144:
@echo Making Blank Floppy of size $(FDSIZE)k
@LC_CTYPE=en_US.US-ASCII tr '\000' '\345' </dev/zero | dd of=$@ bs=1024 count=$(FDSIZE) 2>/dev/null
HDSIZE := 8320 # Legacy
#HDSIZE := 8192 # New
HDSIZE := 8320
HDNEWSIZE := 8192
blankhd:
@echo Making Blank Hd of size $(HDSIZE)k
@LC_CTYPE=en_US.US-ASCII tr '\000' '\345' </dev/zero | dd of=$@ bs=1024 count=$(HDSIZE) 2>/dev/null
%.img: %.bin
@if echo $@ | grep -q ^f ; then \
cat $< > $@ ; \
else \
cat $(HDPREFIX) $< > $@ ; \
fi ; \
%.bin: $(SYSTEMS) blank144 blankhd Makefile
blankhdnew:
@echo Making Blank HdNew of size $(HDNEWSIZE)k
@LC_CTYPE=en_US.US-ASCII tr '\000' '\345' </dev/zero | dd of=$@ bs=1024 count=$(HDNEWSIZE) 2>/dev/null
%.img: $(SYSTEMS) blank144 blankhd blankhdnew Makefile
@sys= ; \
case $@ in \
(*cpm22*) sys=../CPM22/cpm_wbw.sys;; \
(*zsdos* | *nzcom*) sys=../ZSDOS/zsys_wbw.sys;; \
(*cpm3* | *zpm3*) sys=../CPM3/cpmldr.sys;; \
esac ; \
if echo $@ | grep -q ^f ; then \
fmt=wbw_fd144 ; type=fd_ ; proto=blank144 ; \
mid="MID\006" ; \
else \
#fmt=wbw_hd_new ; type=hd_ ; proto=blankhd ; \
#mid="MID\012" ; \
fmt=wbw_hd0 ; type=hd_ ; proto=blankhd ; \
mid="MID\004" ; \
if echo $@ | grep -q ^fd144_ ; then \
fmt=wbw_fd144 ; type=fd144_ ; proto=blank144 ; \
fi ; \
if echo $@ | grep -q ^hd_ ; then \
fmt=wbw_hd ; type=hd_ ; proto=blankhd ; \
fi ; \
if echo $@ | grep -q ^hdnew_ ; then \
fmt=wbw_hdnew ; type=hdnew_ ; proto=blankhdnew ; \
fi ; \
d=$$(echo $(basename $@) | sed s/$$type//) ; \
echo Generating $@ ; \
@ -84,7 +81,7 @@ blankhd:
echo copying system $$sys to $@ ; \
$(BINDIR)/mkfs.cpm -f $$fmt -b $$sys $@ ; \
fi ; \
LC_CTYPE=en_US.US-ASCII echo $$mid | dd bs=1 count=4 seek=1410 conv=notrunc of=$@ ; \
# LC_CTYPE=en_US.US-ASCII echo $$mid | dd bs=1 count=4 seek=1410 conv=notrunc of=$@ ; \
for u in $$(seq 0 15) ; do \
dir=d_$$d/u$$u ; \
if [ -d $$dir ] ; then \
@ -114,13 +111,17 @@ clean::
@rm -f *.ls
imgdiff:
@for i in $(FDIMGS) $(HDIMGS) ; do \
@for i in $(FDIMGS) $(HDIMGS) $(HDNEWIMGS) ; do \
echo $$i ; \
if echo $$i | grep -q ^f ; then \
fmt=wbw_fd144 ; \
else \
fmt=wbw_hd0_1024 ; \
fi ; \
if echo $$i | grep -q ^fd144_ ; then \
fmt=wbw_fd144 ; \
fi ; \
if echo $$i | grep -q ^hd_ ; then \
fmt=wbw_hd ; \
fi ; \
if echo $$i | grep -q ^hdnew_ ; then \
fmt=wbw_hdnew ; \
fi ; \
$(BINDIR)/cpmls -i -f $$fmt $$i > $$i.ls ; \
$(BINDIR)/cpmls -i -f $$fmt $(DIFFPATH)/$$i > $$i.diff.ls ; \
done \

33
Source/Images/diskdefs

@ -345,8 +345,20 @@ diskdef wbw_fd120
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# Legacy format, 512 dir entries, 8,320 sectors / slice
# RomWBW 8320KB Hard Disk Slice
# Legacy format, 512 dir entries, 16,630 sectors / slice
diskdef wbw_hd
seclen 512
tracks 1040
sectrk 16
blocksize 4096
maxdir 512
skew 0
boottrk 16
os 2.2
end
# First 4 slices of wbw_hd
diskdef wbw_hd0
seclen 512
tracks 1040
@ -393,9 +405,9 @@ end
# RomWBW 8MB Hard Disk
# New format, 1024 dir entries, 8,192 sectors / slice
# New format, 1024 dir entries, 16,384 sectors / slice
# Pure filesystem image, no prefix
diskdef wbw_hd_new
diskdef wbw_hdnew
seclen 512
tracks 1024
sectrk 16
@ -406,10 +418,9 @@ diskdef wbw_hd_new
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# New format, 1024 dir entries, 8,192 sectors / slice
# Assumes 256 sector (16 track) hard disk prefix
diskdef wbw_hd0_new
# First 4 slices of wbw_hdnew
# Assumes 128KB prefix (256 sectors)
diskdef wbw_hdnew0
seclen 512
tracks 1040
sectrk 16
@ -420,7 +431,7 @@ diskdef wbw_hd0_new
os 2.2
end
diskdef wbw_hd1_new
diskdef wbw_hdnew1
seclen 512
tracks 2064
sectrk 16
@ -431,7 +442,7 @@ diskdef wbw_hd1_new
os 2.2
end
diskdef wbw_hd2_new
diskdef wbw_hdnew2
seclen 512
tracks 3112
sectrk 16
@ -442,7 +453,7 @@ diskdef wbw_hd2_new
os 2.2
end
diskdef wbw_hd3_new
diskdef wbw_hdnew3
seclen 512
tracks 4136
sectrk 16

BIN
Source/Images/hd_prefix.dat → Source/Images/hdnew_prefix.bin

Binary file not shown.

BIN
Source/RomDsk/ROM_1024KB/FDISK80.COM

Binary file not shown.

BIN
Source/RomDsk/ROM_512KB/FDISK80.COM

Binary file not shown.

34
Source/UBIOS/ubios.inc

@ -11,27 +11,17 @@ BF_CIOOST .EQU BF_CIO + 4 ; CHARACTER OUTPUT STATUS
BF_DIO .EQU $40
BF_DIOREAD .EQU BF_DIO + 2 ; DISK READ
BF_DIOWRITE .EQU BF_DIO + 3 ; DISK WRITE
;;
;; MEMORY BANK CONFIGURATION
;;
;ROMSIZE .EQU 512
;RAMSIZE .EQU 512
;
;BID_ROM0 .EQU $0000
;BID_ROMN .EQU (BID_ROM0 + ((ROMSIZE / 32) - 1))
;BID_RAM0 .EQU $8000
;BID_RAMN .EQU (BID_RAM0 + ((RAMSIZE / 32) - 1))
; MEDIA ID VALUES
;
;BID_BOOT .EQU BID_ROM0 ; BOOT BANK
;BID_BIOSIMG .EQU BID_ROM0 + 1 ; BIOS IMAGE BANK
;BID_OSIMG .EQU BID_ROM0 + 2 ; ROM LOADER AND IMAGES BANK
;BID_FSFAT .EQU BID_ROM0 + 3 ; FAT FILESYSTEM DRIVER BANK
;BID_ROMD0 .EQU BID_ROM0 + 4 ; FIRST ROM DRIVE BANK
;BID_ROMDN .EQU BID_ROMN ; LAST ROM DRIVE BANK
;
;BID_RAMD0 .EQU BID_RAM0 ; FIRST RAM DRIVE BANK
;BID_RAMDN .EQU BID_RAMN - 4 ; LAST RAM DRIVE BANK
;BID_AUX .EQU BID_RAMN - 3 ; AUX BANK (BPBIOS, ETC.)
;BID_BIOS .EQU BID_RAMN - 2 ; BIOS BANK
;BID_USR .EQU BID_RAMN - 1 ; USER BANK (CP/M TPA, ETC.)
;BID_COM .EQU BID_RAMN ; COMMON BANK, UPPER 32K
MID_NONE .EQU 0
MID_MDROM .EQU 1
MID_MDRAM .EQU 2
MID_RF .EQU 3
MID_HD .EQU 4
MID_FD720 .EQU 5
MID_FD144 .EQU 6
MID_FD360 .EQU 7
MID_FD120 .EQU 8
MID_FD111 .EQU 9
MID_HDNEW .EQU 10

2
Source/ver.inc

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

2
Source/ver.lib

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

33
Tools/cpmtools/diskdefs

@ -345,8 +345,20 @@ diskdef wbw_fd120
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# Legacy format, 512 dir entries, 8,320 sectors / slice
# RomWBW 8320KB Hard Disk Slice
# Legacy format, 512 dir entries, 16,630 sectors / slice
diskdef wbw_hd
seclen 512
tracks 1040
sectrk 16
blocksize 4096
maxdir 512
skew 0
boottrk 16
os 2.2
end
# First 4 slices of wbw_hd
diskdef wbw_hd0
seclen 512
tracks 1040
@ -393,9 +405,9 @@ end
# RomWBW 8MB Hard Disk
# New format, 1024 dir entries, 8,192 sectors / slice
# New format, 1024 dir entries, 16,384 sectors / slice
# Pure filesystem image, no prefix
diskdef wbw_hd_new
diskdef wbw_hdnew
seclen 512
tracks 1024
sectrk 16
@ -406,10 +418,9 @@ diskdef wbw_hd_new
os 2.2
end
# RomWBW 8MB Hard Disk, first 4 slices
# New format, 1024 dir entries, 8,192 sectors / slice
# Assumes 256 sector (16 track) hard disk prefix
diskdef wbw_hd0_new
# First 4 slices of wbw_hdnew
# Assumes 128KB prefix (256 sectors)
diskdef wbw_hdnew0
seclen 512
tracks 1040
sectrk 16
@ -420,7 +431,7 @@ diskdef wbw_hd0_new
os 2.2
end
diskdef wbw_hd1_new
diskdef wbw_hdnew1
seclen 512
tracks 2064
sectrk 16
@ -431,7 +442,7 @@ diskdef wbw_hd1_new
os 2.2
end
diskdef wbw_hd2_new
diskdef wbw_hdnew2
seclen 512
tracks 3112
sectrk 16
@ -442,7 +453,7 @@ diskdef wbw_hd2_new
os 2.2
end
diskdef wbw_hd3_new
diskdef wbw_hdnew3
seclen 512
tracks 4136
sectrk 16

4
Tools/simh/Sim.cfg

@ -27,8 +27,8 @@ attach hdsk0 ..\..\Binary\hd_combo.img
attach hdsk1 ..\..\Binary\hd_combo.img
set hdsk0 format=HDSK
set hdsk1 format=HDSK
set hdsk0 geom=T:2048/N:256/S:512
set hdsk1 geom=T:2048/N:256/S:512
set hdsk0 geom=T:8192/N:256/S:512
set hdsk1 geom=T:8192/N:256/S:512
set hdsk0 wrtenb
set hdsk1 wrtenb

Loading…
Cancel
Save