• Please review our updated Terms and Rules here

Extracting files from non-standard CP/M 77-track IMD (Kyber Minus / Ferguson Big Board / Xerox 820)

gferluga

Member
Joined
Jul 11, 2015
Messages
49
Hello everyone,

I’m trying to extract files from a non-standard CP/M disk format (77 tracks), but I’m currently stuck.

The disk image comes from a Kyber Minus Z80 system, which appears to be a close twin of the Ferguson Big Board, and historically related to the Xerox 820.

Disk characteristics (as far as I can tell):
• 77 cylinders
• 2 sides
• 26 sectors per track
• 256 bytes per sector
• CP/M 2.2
• Custom BIOS / non-IBM sector mapping

I can list the directory correctly (both on the real machine and from IMD analysis), but cpmcp fails when extracting file data, even with custom diskdefs.

I’m attaching:
• KYB01.IMD – the disk image
• KYB01.jpg – photo of the real CP/M directory listing
• KYB01.TXT – output from CP/M / ImageDisk / analysis tools

Goal: extract all files from the IMD image to a modern filesystem (Windows / macOS / Linux) for preservation.

At this point I suspect:
• BIOS-specific sector mapping (even/odd track ↔ side)
• non-standard skew or block allocation
• something that cpmtools cannot handle without custom logic

Any advice, tools, scripts, or historical insight would be very welcome.

Thanks in advance!
 

Attachments

Code:
diskdef kyber
  seclen 256
  tracks 154
  sectrk 26
  blocksize 2048
  sectbase 1
  maxdir 128
  skew 6
  boottrk 2
  os 2.2
end
seems to work ...
 
Thanks. This is my output:

cpmcp -f kyber KYB01.IMD "0:*" KYB01
cpmcp: can not read 00zsid.com (Missing address mark.)
cpmcp: can not read 00l80.com (Missing address mark.)
cpmcp: can not read 00pip.com (Missing address mark.)
cpmcp: can not read 00ed.com (Missing address mark.)
cpmcp: can not read 00asm.com (Missing address mark.)
cpmcp: can not read 00ddt.com (Missing address mark.)
cpmcp: can not read 00load.com (Missing address mark.)
cpmcp: can not read 00reform.com (Missing address mark.)
cpmcp: can not read 00dump.com (Missing address mark.)
cpmcp: can not read 00tstdsk.com (Missing address mark.)
cpmcp: can not read 00ksys.com (Missing address mark.)
cpmcp: can not read 00wsi.com (Missing address mark.)
cpmcp: can not read 00wsmsgsi.ovr (Missing address mark.)
cpmcp: can not read 00wsovly1i.ovr (Missing address mark.)
cpmcp: can not read 00sdir.com (Missing address mark.)
cpmcp: can not read 00xdir.com (Missing address mark.)
cpmcp: can not read 00eraq.com (Missing address mark.)
cpmcp: can not read 00fastcopy.com (Missing address mark.)
cpmcp: can not read 00m80.com (Missing address mark.)
cpmcp: can not read 00sort.com (Missing address mark.)
cpmcp: can not read 00nfor.com (Missing address mark.)
cpmcp: can not read 00scrawler.370 (Missing address mark.)
cpmcp: can not read 00copyflop.mac (Missing address mark.)
cpmcp: can not read 00copyflop.rel (Missing address mark.)
cpmcp: can not read 00wspront.doc (Missing address mark.)
cpmcp: can not read 00copyflop.doc (Missing address mark.)


ls -l KYB01
total 144
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 asm.com
-rw-r--r--@ 1 mymac staff 896 Jan 10 22:45 copyflop.bak
-rw-r--r--@ 1 mymac staff 1920 Jan 10 22:45 copyflop.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 copyflop.doc
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 copyflop.mac
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 copyflop.rel
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 ddt.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 dump.com
-rw-r--r--@ 1 mymac staff 4096 Jan 10 22:45 ed.com
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 eraq.com
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 fastcopy.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 ksys.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 l80.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 load.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 m80.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 nfor.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 pip.com
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 reform.com
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 scrawler.370
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 sdir.com
-rw-r--r--@ 1 mymac staff 6144 Jan 10 22:45 sort.com
-rw-r--r--@ 1 mymac staff 5248 Jan 10 22:45 stat.com
-rw-r--r--@ 1 mymac staff 1280 Jan 10 22:45 submit.com
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 tstdsk.com
-rw-r--r--@ 1 mymac staff 4096 Jan 10 22:45 wsi.com
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 wsmsgsi.ovr
-rw-r--r--@ 1 mymac staff 2048 Jan 10 22:45 wsovly1i.ovr
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 wspront.doc
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 xdir.com
-rw-r--r--@ 1 mymac staff 768 Jan 10 22:45 xsub.com
-rw-r--r--@ 1 mymac staff 0 Jan 10 22:45 zsid.com


Looks very strange
 
I got these information from IMDU:

IMageDisk Utility 1.18 / Mar 07 2012
IMD 1.17: 22/05/2020 0:56:02

Assuming 1:1 for Binary output
0/0 500 kbps DD 26x256
154 tracks(77/77), 4004 sectors (2743 Compressed, 57 Unavail)

And with cife I got these files ... must test tomorrow on MSDOS and true CP/M 22disk.
 

Attachments

The disk image appears to have valid data for the files you're looking for - sectors are allocated in the directory and you're reading the directory.

DISK.JPG

CPMCP is something I'm not familiar with so I'm not sure what format you need to insert. There's a number of settings you can tweak. You might need to sit down with the disk until you get the format information correct if you can't find a premade disk definition.

There are 2-byte allocations in each entry - but you only have 150 or so allocations across the whole disk - so I'm not sure why they did this and this is possible the issue you're having with the program which might be assuming 1-byte allocations since it's kind of wasteful of the directory to have 2K blocks - but all kinds of weird formats exist in the CP/M world so it's not an invalid choice. How you can force CPMCP to respect this though without a DPB is something I'm unsure of. There are rules which tell CP/M what to do when it reads the disk, but there's no requirement for two byte allocations that I can see for this disk given the allocation size.

Worst case, you could process the disk yourself with a small program to convert IMD to raw data and spit out the files?
 
( If you're not familiar with reading CP/M entries, the file WSOVLY1.OVR has three entries, is about 34K long (34,048 bytes) and uses blocks 4F,52,53,54,55,56,57,58,59,5A,64,65,66,67,68,69,6A and has 266 records.

This is very different to what your directory output is showing.)
 
Just noticed there's a DISKDEF in the KYB01.TXT file that was different - it suggests block size of 1024 bytes instead? Which doesn't make sense because the final number of records in extent 2 of the aforementioned file has 0A (10) x 128 byte records, so would need to be 2048 byte blocks instead of 1024 bytes as was previously noted...

I'd guess both are wrong -

You *should* have more than 256 blocks on the disk for it to use 16 bit allocations rather than 8 bit and the blocks appear to be 2048 bytes in length from the entries, since it doesn't make sense for 16 bit allocations unless you have . It's possible to disk image doesn't cover all blocks.

You can find the IMD format details here: https://oldcomputers-ddns.org/public/pub/manuals/imd.pdf

Examining this, you have the following in the file header;
unsigned char ucDataBlock[1267] = {
// Offset 0x00000010 to 0x0000003F
0x32, 0x30, 0x32, 0x30, 0x20, 0x20, 0x30, 0x3A, 0x35, 0x36, 0x3A, 0x30,
0x32, 0x0D, 0x0A, 0x1A, 0x03, 0x00, 0x00, 0x1A, 0x01, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x01,

03 : DISK is low density - 250 kbps/FM encoding.
00 : Cylinder 0
00 : Single Sided - no optional bits set.
1A : 26 sectors per track.
01 : 256 Bytes per sector.


Final entry is:

// Offset 0x0004E890 to 0x0004E89F
0xE5, 0x03, 0x4C, 0x41, 0x1A, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x07, 0x08, 0x09, 0x0A

So going through the hex of the disk, the last CYLINDER is 4C - or 77 cylinders ( tracks ). - 4C is 76, and Cylinder 0 is valid, so add one for that.

But I noticed you just posted that you got the files off already - :) So no need to go further?
 
I used imdcat to create a raw image of the disk data (imdcat -o kyb01.raw KYB01.IMD) and then used Jenz's diskdef and it all works fine. I'm able to extract all the files with cpmcp and they all appear to be correct (I can run DUMP.COM and ZSID.COM in an emulator).
 
I did notice that imdcat showed some bad sectors at the end of the disk. I'm guessing that was something that happened when the image was taken from the original floppy:
Code:
73.0:MFM-500k 26x256  1+  2+  3+  4+  5+  6+  7+  8+  9+ 10+ 11+ 12+ 13+ 14+ 15+ 16+ 17+ 18+ 19+ 20+ 21+ 22+ 23+ 24+ 25+ 26+
73.1:MFM-500k 26x256  1+  2+  3+  4+  5+  6+  7+  8+  9+  .  11+ 12+ 13+ 14+ 15+ 16+ 17+ 18+ 19+ 20+ 21+ 22+ 23+ 24+ 25+  .
74.0:MFM-500k 26x256  1+  .   3+  4+  .   6+  .   8+  9+  .  11+  .   .   .  15+ 16+ 17+ 18+ 19+ 20+ 21+ 22+ 23+ 24+ 25+ 26+
74.1:MFM-500k 26x256  1+  2+  .   4+  5+  6+  7+  .   .  10+ 11+  .   .  14+ 15+  .  17+ 18+  .  20+ 21+ 22+  .   .  25+ 26+
75.0:MFM-500k 26x256  1+  2+  3+  4+  .   6+  7+  .   9+  .   .  12+ 13+ 14+  .  16+ 17+ 18+ 19+ 20+ 21+ 22+ 23+ 24+ 25+  .
75.1:MFM-500k 26x256  1+  2+  3+  4+  5+  7+  8+  .   .   .   .  13+  .   .  16+ 17+ 18+ 19+ 20+ 21+ 22+ 23+  .  25+  .   .
76.0:MFM-500k 26x256  1+  2+  .   4+  .   6+  7+  .   .   .  11+  .  13+  .  15+  .  17+ 18+ 19+ 20+ 21+ 22+ 23+ 24+  .  26+
76.1:MFM-500k 26x256  1+  2+  3+  4+  5+  6+  7+  .   .   .   .   .  13+ 14+ 15+  .   .  18+ 19+  .  21+  .   .   .  25+ 26+
 
I used imdcat to create a raw image of the disk data (imdcat -o kyb01.raw KYB01.IMD) and then used Jenz's diskdef and it all works fine. I'm able to extract all the files with cpmcp and they all appear to be correct (I can run DUMP.COM and ZSID.COM in an emulator).
Yes. It works. So simple, but so tricky. Thank you all!
 
I got these information from IMDU:

IMageDisk Utility 1.18 / Mar 07 2012
IMD 1.17: 22/05/2020 0:56:02

Assuming 1:1 for Binary output
0/0 500 kbps DD 26x256
154 tracks(77/77), 4004 sectors (2743 Compressed, 57 Unavail)

And with cife I got these files ... must test tomorrow on MSDOS and true CP/M 22disk.
I used the definition from Jenz above and the IMD Tools on MSDOS below OS/2.
I had the same results as the Veteran Members ... thanks for this nice weekend project.
 
Last edited:
I have the following Definitions for cpmtools and libdsk:

Code:
BEGIN KYM1  Kymber Minux - DSDD 8" - 256 x 26
DENSITY MFM, HIGH
CYLINDERS 77 SIDES 2 SECTORS 26,256
SIDE1 0 1,7,13,19,25,5,11,17,23,3,9,15,21,2,8,14,20,26,6,12,18,24,4,10,16,22
SIDE2 1 1,7,13,19,25,5,11,17,23,3,9,15,21,2,8,14,20,26,6,12,18,24,4,10,16,22
ORDER SIDES
BSH 4 BLM 15 EXM 1 DSM 242 DRM 64 AL0 0C0H AL1 0 OFS 2
END

# KYM1  Kymber Minux - DSDD 8" - 256 x 26
diskdef kym1
  seclen 256
  tracks 154
  sectrk 26
  blocksize 2048
  maxdir 64
  skew 6
  boottrk 2
  os 2.2
end

[kym1]
description = KYM1  Kymber Minux - DSDD 8" - 256 x 26
sides = alt
cylinders = 154
heads = 2
secsize = 256
sectors = 26
secbase = 1
datarate = ED

#Flashfloppy/GOTEK
[kym1]
cyls = 154
heads = 2
secs = 26
interleave = 6
bps = 256
id = 1
rpm = 360
#rpm = 300
rate = 500
mode = mfm
iam = no

BEGIN KYM2  Kymber Minux - SSDD 8" - 256 x 26
DENSITY MFM, HIGH
CYLINDERS 77 SIDES 1 SECTORS 26,256
SIDE1 0 1,7,13,19,25,5,11,17,23,3,9,15,21,2,8,14,20,26,6,12,18,24,4,10,16,22
BSH 4 BLM 15 EXM 1 DSM 242 DRM 64 AL0 0C0H AL1 0 OFS 2
END

# KYM2  Kymber Minux - SSDD 8" - 256 x 26
diskdef kym2
  seclen 256
  tracks 77
  sectrk 26
  blocksize 2048
  maxdir 64
  skew 6
  boottrk 2
  os 2.2
end

[kym2]
description = KYM2  Kymber Minux - SSDD 8" - 256 x 26
cylinders = 77
heads = 1
secsize = 256
sectors = 26
secbase = 1
datarate = ED

#Flashfloppy/GOTEK
[kym2]
cyls = 77
heads = 1
secs = 26
interleave = 6
bps = 256
id = 1
rpm = 360
#rpm = 300
rate = 500
mode = mfm
iam = no


Code:
$ cpmls -f kyb2 -Traw,kyb2 -D KYB01.RAW
$ cpmls -f kyb2 -D KYB01.RAW
     Name    Bytes   Recs  Attr     update             create
------------ ------ ------ ---- -----------------  -----------------
ASM     .COM     8K     64    
COPYFLOP.BAK     2K      7    
COPYFLOP.COM     2K     15    
COPYFLOP.DOC     2K      7    
COPYFLOP.MAC    14K    103    
COPYFLOP.REL     2K     12    
DDT     .COM     6K     38    
DUMP    .COM     2K      4    
ED      .COM     8K     52    
ERAQ    .COM     4K     18    
FASTCOPY.COM     4K     20    
KSYS    .COM     2K     10    
L80     .COM    12K     84    
LOAD    .COM     2K     14    
M80     .COM    20K    150    
NFOR    .COM     2K     10    
PIP     .COM     8K     58    
REFORM  .COM    12K     94    
SCRAWLER.370     4K     24    
SDIR    .COM    16K    120    
SORT    .COM    18K    138    
STAT    .COM     6K     41    
SUBMIT  .COM     2K     10    
TSTDSK  .COM     6K     45    
WSI     .COM    16K    124    
WSMSGSI .OVR    26K    207    
WSOVLY1I.OVR    34K    266    
WSPRONT .DOC     2K      7    
XDIR    .COM     4K     18    
XSUB    .COM     2K      6    
ZSID    .COM    10K     80    
   31 Files occupying    258K,     740K Free.

and COPYFLOP.MAC appears SANE.

Code:
        .Z80
        CSEG
;*****> 9    14         25   TAB POSITIONS: SET BY ^OI
TRUE    EQU  00FFH
TFCB    EQU  005CH
BLKSZ   EQU  128
;*
        JR   INIT
I0:     DB 13
        DB 10
        DC "COPYFLOP 1.0  (C) 1984   Silvano&C. "
        DB 13
        DB 10
        DC "$ "

INIT:   LD   DE,I0
        CALL DISPLAY
;*
        LD   HL,TFCB+1   ;PUNTAMENTO "FILENAME"
        LD   A,0020H     ;ASCII BLANK
        CPI              ;confronta A con (HL)
        CALL Z,GETNAME   ;se uguali, manca il nome
;*
        LD   HL,TFCB+9   ;PUNTAMENTO "FILETYPE"
        LD   A,0020H     ;ASCII BLANK
        CPI              ;confronta A con (HL)
        CALL Z,GETYPE    ;se uguali, manca il tipo
;*
;  setup out fcb
        LD   HL,TFCB     ;puntamento fcb
        LD   DE,OFCB     ;puntamento area da inizializzare
        LD   BC,33       ;byte count
        LDIR             ;copy tfcb to ofcb
;* open input file
        CALL OPENI
;*
;  REPEAT UNTIL <ci_sono_dati>
;
        CALL LEGGI       ;lettura fuori ciclo (look ahead)
MAINLP: LD   A,(EDATI)   ;prepara confronto
        SUB  TRUE        ;set flag se uguali
        JR   NZ,MAINE    ;non uguali: ==> eof occurred
        CALL COPIA
        JR   MAINLP      ;repeat 
MAINE   EQU  $
        CALL CLOSEO      ;close output file and diagnostic msg
        JP   0           ;return to cpm
;
;**************************************************
; acquisizione nome file da operatore
.....
......
.....
.....

;***********************************************
;  svuotamento coda in  memoria
;***********************************************
GETQ    EQU  $
        LD   HL,(QPTR)
        LD   BC,(QBOUND)
        XOR  A          ;reset C flag
        SBC  HL,BC
        JR   NC,GETQ01  ;non ci sono piu' dati in coda

        LD   HL,(QPTR)
        LD   DE,OBUF
        LD   BC,BLKSZ
        LDIR

        LD   (QPTR),HL
        RET
;
GETQ01: LD   A,TRUE
        LD   (EQSPACE),A ;set Q empty condition
        LD   (EQEMPTY),A ;*---
        RET
;*
;***********************************************
; invia messaggio: togliere floppy destinazione 
; e inserire floppy source
;***********************************************
MSGFL2  EQU  $
        LD   DE,MFL2    ;notify swap floppy disk
        CALL DISPLAY    ;send msg
        LD   DE,MFL21
        CALL DISPLAY
        LD   DE,MFL22
        CALL DISPLAY
;*
; wait for response
        LD   A,2        ;set buffer size
        LD   (0080H),A  ;*---
        LD   DE,0080H   ;set buffer address
        LD   C,000AH    ;read console code
        CALL BDOSJP     ;cp/m call
; select input disk
        LD   A,(IFLOP)
        LD   E,A
        LD   C,14
        CALL BDOSJP

        RET

MFL2: DB 13
      DB 10
      DC "fase LETTURA   BUFFER: se hai UN SOLO drive, S M O N T A R E $ "
MFL21: DB 13
       DB 10
       DC "il dischetto COPIA e SOSTITUIRE con DISCHETTO `source' $ "
MFL22: DB 13
       DB 10
       DC "---------- premere Carriage RETURN  quando  OK ---------$ "
;
;***********************************************
; invia messaggio: togliere floppy source e 
; inserire floppy destinazione
;***********************************************
MSGFL1  EQU  $
        LD   DE,MFL1    ;notify swap floppy disk
        CALL DISPLAY    ;send msg
        LD   DE,MFL11
        CALL DISPLAY
        LD   DE,MFL12
        CALL DISPLAY
;*
; wait for response
        LD   A,2        ;set buffer size
        LD   (0080H),A  ;*---
        LD   DE,0080H   ;set buffer address
        LD   C,000AH    ;read console code
        CALL BDOSJP     ;cp/m call
; select output disk
        LD   A,(OFLOP)
        LD   E,A
        LD   C,14
        CALL BDOSJP
                        
        RET

MFL1: DB 13
      DB 10
      DB 10
      DC "fase SCRITTURA BUFFER: se hai UN SOLO drive, S M O N T A R E $ "
MFL11: DB 13
       DB 10
       DB 10
       DC "il DISCHETTO `source' e  SOSTITUIRE con dischetto COPIA $ "
MFL12: DB 13
       DB 10
       DB 10
       DC "---------- premere Carriage RETURN  quando  OK --------- "
       DB 13
       DB 10 
       DC "$ "
;
;***********************************************
;  close output file
;***********************************************
CLOSEO  EQU  $
        LD   DE,OFCB
        LD   C,0010H
        CALL BDOSJP
        RET
;
;***********************************************
;  close input file
;***********************************************
CLOSEI  EQU  $
        LD   DE,TFCB
        LD   C,0010H
        CALL BDOSJP
        RET
;
;***********************************************
;  open file di output
;***********************************************
OPENO   EQU  $
;  1)  verifica che il file non esista
        LD   DE,OFCB
        LD   C,15       ;open code 
        CALL BDOSJP
        SUB  TRUE
        JR   Z,MAKE     ;ok, il file non esiste
; nome duplicato
        LD   DE,MDUP    ;setup msg ...
        CALL DISPLAY    ; ... and send
        JP   0          ; stop program
;*
; 2)  crea il file nella directory
MAKE:   LD   DE,OFCB
        LD   C,22       ;make code
        CALL BDOSJP
        SUB  TRUE
        JR   NZ,OPNE    ;ok, created
; directory full
        LD   DE,DRFULL
        CALL DISPLAY
        JP   0
;
OPNE    EQU  $
        XOR  A
        LD   (EFIRST),A
        LD   (OFCB+32),A
        RET
;
MDUP:   DB   13
        DB   10
        DC "NOME DUPLICATO:  cancella o rinomina  $ "
DRFULL: DB   13
        DB   10
        DC "DIRECTORY FULL:  cancella un file o cambia dischetto $ "
;
;***********************************************
;  chiamata al BDOS
;***********************************************
BDOSJP  EQU  $
        JP   0005H      ;bdos entry point
;
NOTFOUND EQU $
        LD   DE,NOTF    ;error msg
        CALL DISPLAY
        JP   0          ;end program
NOTF:   DB   13
        DB   10
        DC "FILE NOT FOUND: PLEASE, TYPE  dir TO VERIFY $ "
;*
DISPLAY EQU  $     ;DE regs = text addr from caller
        LD   C,9        ;display code
        CALL BDOSJP     ;cp/m call
        RET
;*
IFLOP:  DEFB 0000h
OFLOP:  DEFB 0001H 
EDATI:  DEFB 00FFH
EQEMPTY: DEFB 0000H
EQSPACE: DEFB 00FFH
EFIRST: DEFB 00FFH
OFCB:   DEFS 33
OBUF:   DEFS 256        ;i/o buffer out
IBUF:   DEFS 256        ;i/o buffer input 
QPTR:   DEFW (QUEUE)
QBOUND: DEFW 0
QEND:   DEFW 0
QUEUE   EQU  $
        END


Larry
 

Attachments

I have the following Definitions for cpmtools and libdsk:

Code:
BEGIN KYM1  Kymber Minux - DSDD 8" - 256 x 26
DENSITY MFM, HIGH
CYLINDERS 77 SIDES 2 SECTORS 26,256
SIDE1 0 1,7,13,19,25,5,11,17,23,3,9,15,21,2,8,14,20,26,6,12,18,24,4,10,16,22
SIDE2 1 1,7,13,19,25,5,11,17,23,3,9,15,21,2,8,14,20,26,6,12,18,24,4,10,16,22
ORDER SIDES
BSH 4 BLM 15 EXM 1 DSM 242 DRM 64 AL0 0C0H AL1 0 OFS 2
END

# KYM1  Kymber Minux - DSDD 8" - 256 x 26
diskdef kym1
  seclen 256
  tracks 154
  sectrk 26
  blocksize 2048
  maxdir 64
  skew 6
  boottrk 2
  os 2.2
end

[kym1]
description = KYM1  Kymber Minux - DSDD 8" - 256 x 26
sides = alt
cylinders = 154
heads = 2
secsize = 256
sectors = 26
secbase = 1
datarate = ED

#Flashfloppy/GOTEK
[kym1]
cyls = 154
heads = 2
secs = 26
interleave = 6
bps = 256
id = 1
rpm = 360
#rpm = 300
rate = 500
mode = mfm
iam = no

BEGIN KYM2  Kymber Minux - SSDD 8" - 256 x 26
DENSITY MFM, HIGH
CYLINDERS 77 SIDES 1 SECTORS 26,256
SIDE1 0 1,7,13,19,25,5,11,17,23,3,9,15,21,2,8,14,20,26,6,12,18,24,4,10,16,22
BSH 4 BLM 15 EXM 1 DSM 242 DRM 64 AL0 0C0H AL1 0 OFS 2
END

# KYM2  Kymber Minux - SSDD 8" - 256 x 26
diskdef kym2
  seclen 256
  tracks 77
  sectrk 26
  blocksize 2048
  maxdir 64
  skew 6
  boottrk 2
  os 2.2
end

[kym2]
description = KYM2  Kymber Minux - SSDD 8" - 256 x 26
cylinders = 77
heads = 1
secsize = 256
sectors = 26
secbase = 1
datarate = ED

#Flashfloppy/GOTEK
[kym2]
cyls = 77
heads = 1
secs = 26
interleave = 6
bps = 256
id = 1
rpm = 360
#rpm = 300
rate = 500
mode = mfm
iam = no


Code:
$ cpmls -f kyb2 -Traw,kyb2 -D KYB01.RAW
$ cpmls -f kyb2 -D KYB01.RAW
     Name    Bytes   Recs  Attr     update             create
------------ ------ ------ ---- -----------------  -----------------
ASM     .COM     8K     64   
COPYFLOP.BAK     2K      7   
COPYFLOP.COM     2K     15   
COPYFLOP.DOC     2K      7   
COPYFLOP.MAC    14K    103   
COPYFLOP.REL     2K     12   
DDT     .COM     6K     38   
DUMP    .COM     2K      4   
ED      .COM     8K     52   
ERAQ    .COM     4K     18   
FASTCOPY.COM     4K     20   
KSYS    .COM     2K     10   
L80     .COM    12K     84   
LOAD    .COM     2K     14   
M80     .COM    20K    150   
NFOR    .COM     2K     10   
PIP     .COM     8K     58   
REFORM  .COM    12K     94   
SCRAWLER.370     4K     24   
SDIR    .COM    16K    120   
SORT    .COM    18K    138   
STAT    .COM     6K     41   
SUBMIT  .COM     2K     10   
TSTDSK  .COM     6K     45   
WSI     .COM    16K    124   
WSMSGSI .OVR    26K    207   
WSOVLY1I.OVR    34K    266   
WSPRONT .DOC     2K      7   
XDIR    .COM     4K     18   
XSUB    .COM     2K      6   
ZSID    .COM    10K     80   
   31 Files occupying    258K,     740K Free.

and COPYFLOP.MAC appears SANE.

Code:
        .Z80
        CSEG
;*****> 9    14         25   TAB POSITIONS: SET BY ^OI
TRUE    EQU  00FFH
TFCB    EQU  005CH
BLKSZ   EQU  128
;*
        JR   INIT
I0:     DB 13
        DB 10
        DC "COPYFLOP 1.0  (C) 1984   Silvano&C. "
        DB 13
        DB 10
        DC "$ "

INIT:   LD   DE,I0
        CALL DISPLAY
;*
        LD   HL,TFCB+1   ;PUNTAMENTO "FILENAME"
        LD   A,0020H     ;ASCII BLANK
        CPI              ;confronta A con (HL)
        CALL Z,GETNAME   ;se uguali, manca il nome
;*
        LD   HL,TFCB+9   ;PUNTAMENTO "FILETYPE"
        LD   A,0020H     ;ASCII BLANK
        CPI              ;confronta A con (HL)
        CALL Z,GETYPE    ;se uguali, manca il tipo
;*
;  setup out fcb
        LD   HL,TFCB     ;puntamento fcb
        LD   DE,OFCB     ;puntamento area da inizializzare
        LD   BC,33       ;byte count
        LDIR             ;copy tfcb to ofcb
;* open input file
        CALL OPENI
;*
;  REPEAT UNTIL <ci_sono_dati>
;
        CALL LEGGI       ;lettura fuori ciclo (look ahead)
MAINLP: LD   A,(EDATI)   ;prepara confronto
        SUB  TRUE        ;set flag se uguali
        JR   NZ,MAINE    ;non uguali: ==> eof occurred
        CALL COPIA
        JR   MAINLP      ;repeat
MAINE   EQU  $
        CALL CLOSEO      ;close output file and diagnostic msg
        JP   0           ;return to cpm
;
;**************************************************
; acquisizione nome file da operatore
.....
......
.....
.....

;***********************************************
;  svuotamento coda in  memoria
;***********************************************
GETQ    EQU  $
        LD   HL,(QPTR)
        LD   BC,(QBOUND)
        XOR  A          ;reset C flag
        SBC  HL,BC
        JR   NC,GETQ01  ;non ci sono piu' dati in coda

        LD   HL,(QPTR)
        LD   DE,OBUF
        LD   BC,BLKSZ
        LDIR

        LD   (QPTR),HL
        RET
;
GETQ01: LD   A,TRUE
        LD   (EQSPACE),A ;set Q empty condition
        LD   (EQEMPTY),A ;*---
        RET
;*
;***********************************************
; invia messaggio: togliere floppy destinazione
; e inserire floppy source
;***********************************************
MSGFL2  EQU  $
        LD   DE,MFL2    ;notify swap floppy disk
        CALL DISPLAY    ;send msg
        LD   DE,MFL21
        CALL DISPLAY
        LD   DE,MFL22
        CALL DISPLAY
;*
; wait for response
        LD   A,2        ;set buffer size
        LD   (0080H),A  ;*---
        LD   DE,0080H   ;set buffer address
        LD   C,000AH    ;read console code
        CALL BDOSJP     ;cp/m call
; select input disk
        LD   A,(IFLOP)
        LD   E,A
        LD   C,14
        CALL BDOSJP

        RET

MFL2: DB 13
      DB 10
      DC "fase LETTURA   BUFFER: se hai UN SOLO drive, S M O N T A R E $ "
MFL21: DB 13
       DB 10
       DC "il dischetto COPIA e SOSTITUIRE con DISCHETTO `source' $ "
MFL22: DB 13
       DB 10
       DC "---------- premere Carriage RETURN  quando  OK ---------$ "
;
;***********************************************
; invia messaggio: togliere floppy source e
; inserire floppy destinazione
;***********************************************
MSGFL1  EQU  $
        LD   DE,MFL1    ;notify swap floppy disk
        CALL DISPLAY    ;send msg
        LD   DE,MFL11
        CALL DISPLAY
        LD   DE,MFL12
        CALL DISPLAY
;*
; wait for response
        LD   A,2        ;set buffer size
        LD   (0080H),A  ;*---
        LD   DE,0080H   ;set buffer address
        LD   C,000AH    ;read console code
        CALL BDOSJP     ;cp/m call
; select output disk
        LD   A,(OFLOP)
        LD   E,A
        LD   C,14
        CALL BDOSJP
                       
        RET

MFL1: DB 13
      DB 10
      DB 10
      DC "fase SCRITTURA BUFFER: se hai UN SOLO drive, S M O N T A R E $ "
MFL11: DB 13
       DB 10
       DB 10
       DC "il DISCHETTO `source' e  SOSTITUIRE con dischetto COPIA $ "
MFL12: DB 13
       DB 10
       DB 10
       DC "---------- premere Carriage RETURN  quando  OK --------- "
       DB 13
       DB 10
       DC "$ "
;
;***********************************************
;  close output file
;***********************************************
CLOSEO  EQU  $
        LD   DE,OFCB
        LD   C,0010H
        CALL BDOSJP
        RET
;
;***********************************************
;  close input file
;***********************************************
CLOSEI  EQU  $
        LD   DE,TFCB
        LD   C,0010H
        CALL BDOSJP
        RET
;
;***********************************************
;  open file di output
;***********************************************
OPENO   EQU  $
;  1)  verifica che il file non esista
        LD   DE,OFCB
        LD   C,15       ;open code
        CALL BDOSJP
        SUB  TRUE
        JR   Z,MAKE     ;ok, il file non esiste
; nome duplicato
        LD   DE,MDUP    ;setup msg ...
        CALL DISPLAY    ; ... and send
        JP   0          ; stop program
;*
; 2)  crea il file nella directory
MAKE:   LD   DE,OFCB
        LD   C,22       ;make code
        CALL BDOSJP
        SUB  TRUE
        JR   NZ,OPNE    ;ok, created
; directory full
        LD   DE,DRFULL
        CALL DISPLAY
        JP   0
;
OPNE    EQU  $
        XOR  A
        LD   (EFIRST),A
        LD   (OFCB+32),A
        RET
;
MDUP:   DB   13
        DB   10
        DC "NOME DUPLICATO:  cancella o rinomina  $ "
DRFULL: DB   13
        DB   10
        DC "DIRECTORY FULL:  cancella un file o cambia dischetto $ "
;
;***********************************************
;  chiamata al BDOS
;***********************************************
BDOSJP  EQU  $
        JP   0005H      ;bdos entry point
;
NOTFOUND EQU $
        LD   DE,NOTF    ;error msg
        CALL DISPLAY
        JP   0          ;end program
NOTF:   DB   13
        DB   10
        DC "FILE NOT FOUND: PLEASE, TYPE  dir TO VERIFY $ "
;*
DISPLAY EQU  $     ;DE regs = text addr from caller
        LD   C,9        ;display code
        CALL BDOSJP     ;cp/m call
        RET
;*
IFLOP:  DEFB 0000h
OFLOP:  DEFB 0001H
EDATI:  DEFB 00FFH
EQEMPTY: DEFB 0000H
EQSPACE: DEFB 00FFH
EFIRST: DEFB 00FFH
OFCB:   DEFS 33
OBUF:   DEFS 256        ;i/o buffer out
IBUF:   DEFS 256        ;i/o buffer input
QPTR:   DEFW (QUEUE)
QBOUND: DEFW 0
QEND:   DEFW 0
QUEUE   EQU  $
        END


Larry
Yes, COPYFLOP.MAC is genuine as commented in Italian ;)-
 
Finally I'm able to run, on RunCpm, Wordstar 3 in Italian!!!
Honestly it's the first time I see it in Italian on CP/M.
 

Attachments

  • IMG_0201.PNG
    IMG_0201.PNG
    415.3 KB · Views: 6
  • IMG_0202.PNG
    IMG_0202.PNG
    316.7 KB · Views: 6
  • IMG_0206.PNG
    IMG_0206.PNG
    246.9 KB · Views: 6
@gferluga Please post the output of the command
Code:
stat dsk:
Here we are:

RunCPM Version 6.7 (CP/M 60K)

A5>stat dsk:

A: Drive Characteristics
65536: 128 Byte Record Capacity
8192: Kilobyte Drive Capacity
1024: 32 Byte Directory Entries
0: Checked Directory Entries
256: Records/ Extent
32: Records/ Block
64: Sectors/ Track
2: Reserved Tracks

A5>
 
Here we are:

RunCPM Version 6.7 (CP/M 60K)

A5>stat dsk:

A: Drive Characteristics
65536: 128 Byte Record Capacity
8192: Kilobyte Drive Capacity
1024: 32 Byte Directory Entries
0: Checked Directory Entries
256: Records/ Extent
32: Records/ Block
64: Sectors/ Track
2: Reserved Tracks

A5>

Well, that's pretty maxed out... It doesn't get any larger than 8Mb.
That doesn't match the disk at all?
 
I'm guessing Jenz was looking for the floppy dsk: stats. I think gferluga extracted the files on a PC and added them to the A: image for RunCPM, so the floppy image stats are just whatever diskdef was used.
 
Yes, sorry, I did it from RunCPM. Right now I don't have access to my Kyber Minus as I'm out of town for some weeks. As soon as I can I'll do it.

Meanwhile I discover I cannot extract the attached disk image. Many errors. Please advise. Thanks in advance.
 

Attachments

Back
Top