• Please review our updated Terms and Rules here

Wanted: Exidy Sorcerer CP/M

steven stengel

Experienced Member
Joined
Feb 20, 2005
Messages
72
Location
Southern California 92656
Hi, I need CP/M, either floppy or cart based, for my Exidy Sorcerer.

I want to format and use the floppy drives - I have the S-100 expansion and interface card.

I’ll make a copy and return your disk if you have one.

Thanks-
Steve.
 
I looked at the Dave Dunfield's site and don't see an image there. I don't remember seeing an .IMD, or TD0 Image
for the Exidy Sorcerer.

Does any VCF member have some Images for this CP/M Computer, or know of download URL?

Larry
 
In my Exidy project folder I have two .dsk files named CPM disk 1 and CPM disk 2, have not tried these myself as my Exidy emulator does not have disk support yet..
If you PM me your email address I can send you these (about 350k zipped)
 
In my Exidy project folder I have two .dsk files named CPM disk 1 and CPM disk 2, have not tried these myself as my Exidy emulator does not have disk support yet..
If you PM me your email address I can send you these (about 350k zipped)

I can post these and make them publicly available, if you like. I'll PM my email address.

I have some 8" disks that have CP/M for my Exidy system but I'm not sure it's works as a standard configuration with the expansion chassis. I need to dig out those disks and try to archive them.
 
Thanks to gertk, I have a zip file with the two disk images in it. It is located here: http://vintagecomputer.ca/files/Exidy Sorcerer/software/cpmdisks.zip

It turns out that I already had these disk images files as well and am not sure where I picked them up. I read the first disk and caught this string:

CP/M on Exidy Sorcerer
45K CP/M VERS 1.42/3
Copyright (C) 1979 Exidy Inc

Hope this helps.
 
Those files are 332,640 bytes. Do you have a clue as to Tracks=?, Sectors-per-track=?, Bytes-per-Sector=?, Sides=?, Boot Tracks=?, Skew=? of those .DSK files?

Looking at the files with hexedit the directory starts at 0x21CD.

I'm trying to access them with cpmtools.

Larry
 
Those files are 332,640 bytes. Do you have a clue as to Tracks=?, Sectors-per-track=?, Bytes-per-Sector=?, Sides=?, Boot Tracks=?, Skew=? of those .DSK files?

Looking at the disk in a hext editor, you can see this text string: "EXIDY MICROPOLIS DISK COPY PROGRAM VERSION 1.0.(C) COPYRIGHT EXIDY INC. 1979"

Maybe these are hard sectored disk images? We need "steven stengel" to crack open the expansion unit and check the drive controller, if he has one.

On another note, I do have soft sectored 5.25" CP/M floppies for my Exidy set up but it's for a CCS based CP/M. I don't think it's compatible with the expansion unit and the cards/drives that may come with them or the monitor/floppy unit.
 
Last edited:
I think it is hard sectored.

Well, the plot thickens. I scanned the original Exidy Sorcerer CP/M Software manual this morning and it's here: http://vintagecomputer.ca/files/Exidy Sorcerer/Exidy Sorcerer CPM Software Manual.pdf

These disk images don't appear to match the normal Exidy Sorcerer produced hardware in the Floppy Disk Subsystem or the Display Disk Subsystem. The bootup message for these disk images is different so these might be hard-sectored but it also might be soft-sectored. This manual mentions both single-sided and double-sided soft-sectored Micropolis drives for those two units on PDF page 306 as shown below. Might be worth looking into the Micropolis 77 track soft-sectored format. The CP/M manual also talks about incompatibility and the Exidy specific skewing pattern on PDF page 309 which is "must read" material. Hope this helps.

Portion of page 309:

A. Hardware for the DDS and the FDS

The Exidy CBIOS runs on both the Display Disk System
(DDS) and the Floppy Disk Subsystem (FDS). A DDS
consists of a Sorcerer II Computer (with keyboard),
Display Disk Unit containing a video screen, and two soft
sectored Micropolis drives. The Exidy CBIOS may actually
support three disk drives connected to the soft sectored
disk controller. However, a controller and only two
drives are supplied with the DDS. The DDS may be
augmented by other peripherals such as a printer,
cassettes, etc.. The Exidy CBIOS assigns the logical
CP/M devices, Punch and Reader, to serial write and
serial read respectively. The List device is assigned to
the Sorcerer Centronics parallel printer interface.

On cold boot, CP/M on the DDS outputs one of the
following messages:

CP/M on the Exidy Sorcerer for 77 Track Disk
77 Track Single Sided Disks
32K CP/M VERS 2.2/lF
Copyright (C) 1981 Exidy Systems, Inc.
A>


or

CP/M on the Exidy System 80
77 Track Double Sided Disks
32K CP/M VERS 2.2/2F
Copyright (c) 1981 Exidy Systems, Inc.
A>


The Exidy CBIOS also runs on the Floppy Disk System
(FDS). An FDS consists of a Sorcerer II Computer (with
keyboard), and a Floppy Disk Subsystem containing an MPI
floppy disk drive and controller. The Exidy CBIOS may
actually support three disk drives connected to the soft
sectored disk controller. However, a controller and only
one drive are supplied with the standard Floppy Disk
Subsystem. The FDS may be augmented by other peripherals
such as printers, cassettes, etc.. The Exidy CBIOS
assigns the logical CP/M devices Punch and Reader, to
serial write and serial read respectively. The List
device is assigned to the Sorcerer Centronics parallel
printer interface.

Version 2.2/lF CBIOS operates on the FDS and version
2.2/2F operates on the DDS.
 
I stumbled across this emulator on the Internet.

http://www.liaquay.co.uk/


Larry

The CP/M version looks the same as the two disks images I had..

There are 4 disk images supplied with this java emulator.

In the emulator you can start CP/M by entering GO BC00, have to find out where that binary block is coming from. Maybe I can implement it in my emulator.
 
Last edited:
THANKS Chuck,
I was able to access it with cpmtools. I'm hoping my conjured up definition is correct.


#IMDA EXID1.IMD > EXID1.TXT

IMageDisk Analyzer 1.18 / Mar 12 2012
IMD 1.18: 9/08/2018 19:10:38

Exidy Sorcerer CP/M with Spellbinder SSDD 48 tpi

Archived by CPG Aug 8, 2018

Required cylinders: 40
Required heads : 1
Data rate : 250kbps
Est. maximum track: 5541 bytes

Possible drives/options to write EXID1.IMD :

5.25" DD 40-track
Double-step: OFF

5.25" QD 80-track
Double-step: ON

5.25" HD 80-track
Double-step: ON
250 kbps -> 300 kbps

3.5" DD 80-track NOTE: *1
Double-step: OFF

3.5" HD 80-track NOTE: *1
Double-step: OFF

*1 40 track image will use only first 1/2 of 80-track drive.

#imdu EXID1.IMD EXID1.RAW /B /E /D >> EXID1.TXT

IMageDisk Utility 1.18 / Mar 07 2012
IMD 1.18: 9/08/2018 19:10:38

Exidy Sorcerer CP/M with Spellbinder SSDD 48 tpi

Archived by CPG Aug 8, 2018

Assuming 1:1 for Binary output
0/0 250 kbps DD 16x256
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
D D D D D D D D D D D D D D D D
1/0 D D D D D D00 D D D D D D D D D D
2/0 DE5 DE5 DE5 DE5 D D DE5 DE5 DE5 DE5 D DE5 DE5 DE5 DE5 D
3/0 D D D D D D D D D D D D D D D D
4/0 D D D D D D D D D D D D D D D D
5/0 D D D D D D D D D D D D D D D D
6/0 DE5 DE5 D DE5 D D DE5 D DE5 DE5 D DE5 D D DE5 D
7/0 DE5 D D D D D DE5 D D D D DE5 D D D D
8/0 D D D D D D D D D D D D D D D D
9/0 DE5 DE5 D D D D DE5 D D D D DE5 D D D D
10/0 D D D D D D D D D D D D D D D D
11/0 D D D D D D D D D D D D D D D D
12/0 DE5 D D D D D DE5 D D D D DE5 D D D D
13/0 DE5 D D D D D D D D D D DE5 D D D D
14/0 DE5 D D D D D DE5 D DE5 D D DE5 D D D D
15/0 DE5 DE5 D DE5 D D DE5 DE5 DE5 D D DE5 DE5 D D D
16/0 DE5 D D DE5 D D D D DE5 D D DE5 D D DE5 D
17/0 DE5 DE5 DE5 DE5 DE5 D DE5 DE5 DE5 DE5 DE5 DE5 DE5 D DE5 DE5
18/0 DE5 D D DE5 DE5 D DE5 D DE5 DE5 D DE5 D D DE5 D
19/0 DE5 DE5 D DE5 DE5 D DE5 D DE5 DE5 D DE5 D D DE5 DE5
20/0 D D D D D D D D DE5 D D D D D D D
21/0 DE5 DE5 D DE5 DE5 D DE5 DE5 DE5 DE5 D DE5 DE5 D DE5 D
22/0 D D D DE5 DE5 D D D DE5 DE5 D D D D DE5 DE5
23/0 D D D DE5 DE5 D D D DE5 DE5 DE5 D D D DE5 DE5
24/0 D D D DE5 DE5 D D D DE5 DE5 DE5 D D D DE5 DE5
25/0 D D D DE5 D D D D DE5 DE5 D D D D DE5 D
26/0 DE5 D D DE5 DE5 D DE5 D DE5 DE5 DE5 DE5 D D DE5 DE5
27/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
28/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
29/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
30/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
31/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
32/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
33/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
34/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
35/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
36/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
37/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
38/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
39/0 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5 DE5
40 tracks(40/0), 640 sectors (336 Compressed)


cpmls -f exi1 -D EXID1.RAW
Name Bytes Recs Attr update create
------------ ------ ------ ---- ----------------- -----------------
BATCH .WPM 2K 7
BOILER .WPM 2K 4
COMMAND .HEP 2K 4
CUESORT .WPM 4K 21
CUSTLIST.WPF 2K 3
DEMO1 .WPF 2K 14
DEMO2 .WPF 2K 10
DEMO4 .WPF 2K 12
DISK .HEP 4K 17
EXCOPY .COM 4K 28
FILE .DEM 4K 17
FORMAT .HEP 4K 17
FORMS .WPM 2K 9
GETTY . 2K 10
GETTY .WPF 2K 10
HE .HEP 2K 3
MMDEMO .WPF 2K 12
MMERGE .WPM 2K 14
PIP .COM 8K 56
PP .COM 6K 40
PRINT .HEP 2K 15
SB .COM 20K 154
SPACE .TAB 2K 7
STAT .COM 4K 26
SYSGEN .COM 2K 8

#cpmcp -f exi1 EXID1.RAW 0:GETTY.WPF .

Thanks.

Larry
 
I barely located it--it was in my E stack of samples, but between all of the Epson ones, not after the Excalibur samples.

At least they're vaguely alphabetized. :)
 
The OP (Steven Stengel) is asking for a CP/M disk but does not specify what S-100 floppy disk controller he has installed in his S-100 expansion interface. Steven also sent me a PM asking the same, so I replied asking what interface card he has.

On the topic of emulation; I have a MAME system running emulating a disk system. I don’t remember where I got it from but if other forum members are interested in getting this to work it’s probably best to start a new thread?
 
In the forementioned java emulator I found these disk parameters:

Code:
  public static final int SECTORS_PER_TRACK = 16;
  public static final int NUMBER_OF_TRACKS = 77;
  public static final int BYTES_PER_SECTOR = 256+14;
 
Sorcerer Emulator .DSK Images

Sorcerer Emulator .DSK Images

Yes, those Emulator files are a bit different than a typical CP/M Image as they have a 13 byte Header before
each sector's data (256 bytes) followed by a checksum byte (of the previous bytes). THANKS to Chuck(G) for
helping to locate the actual File's Layout Structure.

*
* There a 13 byte HEADER at the beginning of each 256 byte sector that has the
* following format:
*
* First byte = hex FF
* second byte = cylinder number, hex 00-4F
* third byte = sector number, hex 0-F
* fourth through thirteenth bytes = 0
* Followed by 256 bytes of sector data
* Followed by 1 byte of arithmetic checksum of the whole 13+256 bytes
* ...repeat until done...
*
* 270 * 16 * 77 = 332640
*
* 00000000 FF 00 00 00 00 00 00 00 00 00 00 00 00 CD A2 E1 ................
* 00000010 FD F9 CD 82 04 01 00 01 2A FA 04 EB D5 C5 CD 3B ........*......;
* 00000020 04 C1 D1 20 ED 04 78 FE 10 20 0E 06 00 79 B7 20 ... ..x.. ...y.
*
* Data at 0x000D = 0xCD is the first of the 256 bytes of RAW data.
* Remember to toss the checksum byte too.

I've conjured up a cpmtools definition for the .RAW data from these .DSK images (*.RAW) and have accessed
the files with cpmtools. My definition for the 256 Byte Sectors, 16 Sectors per Track, and 77 Tracks, with 2 Boot Tracks
follows:

# Exidy Sorcerer - SS/DD, ie: 8" - 256 x 16
# 77 tracks, 1 sides, 16 sectors/track, 256 bytes/sector
# Bytes on the media = 1*77*16*256 = 315392
#
# EXI2 Exidy Sorcerer - SSDD 48 tpi 8" - 256 x 16
diskdef exi2
seclen 256
tracks 77
sectrk 16
blocksize 2048
maxdir 64
datarate HD
fm YES
skew 5
# offset 8192 # 0x2000 = 8192
boottrk 2
os 2.2
end

The Directories look sane. I've extracted the BIOS.ASM and CBIOS.ASM and they also look sane.

cpmls -f exi2 -D disk1.raw
Name Bytes Recs Attr update create
------------ ------ ------ ---- ----------------- -----------------
ADMIN1 .WPF 2K 5
ASM .COM 10K 65
BASCNVRT.COM 4K 17
BASIC .COM 2K 11
BASIC1 .COM 10K 73
BASIC2 .COM 10K 67
BIOS .ASM 12K 92
BIOS .WPF 12K 92
CALENDAR.COM 6K 35
CBIOS .ASM 8K 55
CHESS .COM 10K 71
COPYCAT .COM 2K 9
DBS1 .WPF 4K 19
DDT .COM 6K 38
DEVCNVRT.COM 2K 11
DISKBAS .COM 4K 19
DISKCOPY.COM 4K 21
DUMP .ASM 6K 35
DUMP .COM 2K 4
ED .COM 8K 49
EXASM .COM 12K 95
EXBASIC .COM 24K 190
EXLINK .COM 6K 45
FILECOPY.COM 2K 6
FORMAT .COM 4K 19
INVADERS.COM 6K 42
LIBINDEX.COM 4K 27
LOAD .COM 2K 15
MAZE .COM 6K 35
MBASIC .COM 24K 189
MOVCPM .COM 14K 102
OBASIC .COM 20K 145
PATTERN .BAS 2K 2
PIP .COM 8K 57
PRINT .WPF 2K 11
RAY1 .WPF 2K 6
STAT .COM 4K 24
SUBMIT .COM 2K 11
SYSGEN .COM 2K 10
TOUCH .COM 6K 33
WP .COM 2K 4
WP9 .COM 6K 35
42 Files occupying 284K, 14K Free.


cpmcp -f exi2 disk1.raw 0:*.asm .


$ls -alt *.asm
-rw-r--r-- 1 larry larry 11776 Aug 11 21:36 bios.asm
-rw-r--r-- 1 larry larry 7040 Aug 11 21:36 cbios.asm
-rw-r--r-- 1 larry larry 4480 Aug 11 21:36 dump.asm


BIOS.ASM
; MDS I/O DRIVERS FOR CP/M
; (FOUR DRIVE SINGLE DENSITY VERSION)
; VERSION 1.4 JANUARY, 1978
;
VERS EQU 14 ;VERSION 1.4
;
; COPYRIGHT (C) 1978
; DIGITAL RESEARCH
; BOX 579, PACIFIC GROVE
; CALIFORNIA, 93950
;
;
TRUE EQU 0FFFFH ;VALUE OF "TRUE"
FALSE EQU NOT TRUE ;"FALSE"
SAMPLE EQU FALSE ;TRUE IF SAMPLE BIOS
;
IF SAMPLE
BIAS EQU 2900H ;SAMPLE PROGRAM IN 16K SYSTEM
ENDIF
IF NOT SAMPLE
BIAS EQU 0000H ;GENERATE RELOCATABLE CP/M SYSTEM
ENDIF
;
PATCH EQU 1500H+BIAS
;
ORG PATCH
CPMB EQU 000H+BIAS ;BASE OF CPM CONSOLE PROCESSOR
BDOS EQU 806H+BIAS ;BASIC DOS (RESIDENT PORTION)
CPML EQU $-CPMB ;LENGTH (IN BYTES) OF CPM SYSTEM
NSECTS EQU CPML/128 ;NUMBER OF SECTORS TO LOAD
OFFSET EQU 2 ;NUMBER OF DISK TRACKS USED BY CP/M
CDISK EQU 0004H ;ADDRESS OF LAST LOGGED DISK ON WARM START
BUFF EQU 0080H ;DEFAULT BUFFER ADDRESS
RETRY EQU 10 ;MAX RETRIES ON DISK I/O BEFORE ERROR
;
; PERFORM FOLLOWING FUNCTIONS
; BOOT COLD START
; WBOOT WARM START (SAVE I/O BYTE)
; (BOOT AND WBOOT ARE THE SAME FOR MDS)
; CONST CONSOLE STATUS
; REG-A = 00 IF NO CHARACTER READY
; REG-A = FF IF CHARACTER READY
; CONIN CONSOLE CHARACTER IN (RESULT IN REG-A)
; CONOUT CONSOLE CHARACTER OUT (CHAR IN REG-C)
; LIST LIST OUT (CHAR IN REG-C)
; PUNCH PUNCH OUT (CHAR IN REG-C)
; READER PAPER TAPE READER IN (RESULT TO REG-A)
; HOME MOVE TO TRACK 00
;
; (THE FOLLOWING CALLS SET-UP THE IO PARAMETER BLOCK FOR THE
; MDS, WHICH IS USED TO PERFORM SUBSEQUENT READS AND WRITES)
; SELDSK SELECT DISK GIVEN BY REG-C (0,1,2...)
; SETTRK SET TRACK ADDRESS (0,...76) FOR SUBSEQUENT READ/WRITE
; SETSEC SET SECTOR ADDRESS (1,...,26) FOR SUBSEQUENT READ/WRITE
; SETDMA SET SUBSEQUENT DMA ADDRESS (INITIALLY 80H)
;
; (READ AND WRITE ASSUME PREVIOUS CALLS TO SET UP THE IO PARAMETERS)
; READ READ TRACK/SECTOR TO PRESET DMA ADDRESS
; WRITE WRITE TRACK/SECTOR FROM PRESET DMA ADDRESS
;
; JUMP VECTOR FOR INDIVIUAL ROUTINES
JMP BOOT
WBOOTE: JMP WBOOT
JMP CONST
JMP CONIN
JMP CONOUT
JMP LIST
JMP PUNCH
JMP READER
JMP HOME
JMP SELDSK
JMP SETTRK
JMP SETSEC
JMP SETDMA
JMP READ
JMP WRITE
;
;
; END OF CONTROLLER - INDEPENDENT CODE, THE REMAINING SUBROUTINES
; ARE TAILORED TO THE PARTICULAR OPERATING ENVIRONMENT, AND MUST
; BE ALTERED FOR ANY SYSTEM WHICH DIFFERS FROM THE INTEL MDS.
;
; THE FOLLOWING CODE ASSUMES THE MDS MONITOR EXISTS AT 0F800H
; AND USES THE I/O SUBROUTINES WITHIN THE MONITOR
;
; WE ALSO ASSUME THE MDS SYSTEM HAS FOUR DISK DRIVES
NDISKS EQU 4 ;NUMBER OF DRIVES AVAILABLE
REVRT EQU 0FDH ;INTERRUPT REVERT PORT
INTC EQU 0FCH ;INTERRUPT MASK PORT
ICON EQU 0F3H ;INTERRUPT CONTROL PORT
INTE EQU 0111$1110B ;ENABLE RST 0(WARM BOOT), RST 7 (MONITOR)
;
; MDS MONITOR EQUATES
MON80 EQU 0F800H ;MDS MONITOR
RMON80 EQU 0FF0FH ;RESTART MON80 (BOOT ERROR)
CI EQU 0F803H ;CONSOLE CHARACTER TO REG-A
RI EQU 0F806H ;READER IN TO REG-A
CO EQU 0F809H ;CONSOLE CHAR FROM C TO CONSOLE OUT
PO EQU 0F80CH ;PUNCH CHAR FROM C TO PUNCH DEVICE
LO EQU 0F80FH ;LIST FROM C TO LIST DEVICE
CSTS EQU 0F812H ;CONSOLE STATUS 00/FF TO REGISTER A
;
; DISK PORTS AND COMMANDS
BASE EQU 78H ;BASE OF DISK COMMAND IO PORTS
DSTAT EQU BASE ;DISK STATUS (INPUT)
RTYPE EQU BASE+1 ;RESULT TYPE (INPUT)
RBYTE EQU BASE+3 ;RESULT BYTE (INPUT)
;
ILOW EQU BASE+1 ;IOPB LOW ADDRESS (OUTPUT)
IHIGH EQU BASE+2 ;IOPB HIGH ADDRESS (OUTPUT)
;
READF EQU 4H ;READ FUNCTION
WRITF EQU 6H ;WRITE FUNCTION
RECAL EQU 3H ;RECALIBRATE DRIVE
IORDY EQU 4H ;I/O FINISHED MASK
CR EQU 0DH ;CARRIAGE RETURN
LF EQU 0AH ;LINE FEED
;
SIGNON: ;SIGNON MESSAGE: XXK CP/M VERS Y.Y
DB CR,LF,LF
IF SAMPLE
DB '16' ;16K EXAMPLE BIOS
ENDIF
IF NOT SAMPLE
DB '00' ;MEMORY SIZE FILLED BY RELOCATOR
ENDIF
DB 'K CP/M VERS '
DB VERS/10+'0','.',VERS MOD 10+'0'
DB CR,LF,0
;
BOOT: ;PRINT SIGNON MESSAGE AND GO TO CCP
; (NOTE: MDS BOOT INITIALIZED IOBYTE AT 0003H)
LXI SP,BUFF+80H
LXI H,SIGNON
CALL PRMSG ;PRINT MESSAGE
XRA A ;CLEAR ACCUMULATOR
STA CDISK ;SET INITIALLY TO DISK A
JMP GOCPM ;GO TO CP/M
;
;
WBOOT:; LOADER ON TRACK 0, SECTOR 1, WHICH WILL BE SKIPPED FOR WARM
; READ CP/M FROM DISK - ASSUMING THERE IS A 128 BYTE COLD START
; START.
;
LXI SP,BUFF ;USING DMA - THUS 80 THRU FF AVAILABLE FOR STACK
;
MVI C,RETRY ;MAX RETRIES
PUSH B
WBOOT0: ;ENTER HERE ON ERROR RETRIES
LXI B,CPMB ;SET DMA ADDRESS TO START OF DISK SYSTEM
CALL SETDMA
MVI C,0 ;BOOT FROM DRIVE 0
CALL SELDSK
MVI C,0
CALL SETTRK ;START WITH TRACK 0
MVI C,2 ;START READING SECTOR 2
CALL SETSEC
;
; READ SECTORS, COUNT NSECTS TO ZERO
POP B ;10-ERROR COUNT
MVI B,NSECTS
RDSEC: ;READ NEXT SECTOR
PUSH B ;SAVE SECTOR COUNT
CALL READ
JNZ BOOTERR ;RETRY IF ERRORS OCCUR
LHLD IOD ;INCREMENT DMA ADDRESS
LXI D,128 ;SECTOR SIZE
DAD D ;INCREMENTED DMA ADDRESS IN HL
MOV B,H
MOV C,L ;READY FOR CALL TO SET DMA
CALL SETDMA
LDA IOS ;SECTOR NUMBER JUST READ
CPI 26 ;READ LAST SECTOR?
JC RD1
; MUST BE SECTOR 26, ZERO AND GO TO NEXT TRACK
LDA IOT ;GET TRACK TO REGISTER A
INR A
MOV C,A ;READY FOR CALL
CALL SETTRK
XRA A ;CLEAR SECTOR NUMBER
RD1: INR A ;TO NEXT SECTOR
MOV C,A ;READY FOR CALL
CALL SETSEC
POP B ;RECALL SECTOR COUNT
DCR B ;DONE?
JNZ RDSEC
;
; DONE WITH THE LOAD, RESET DEFAULT BUFFER ADDRESS
GOCPM: ;(ENTER HERE FROM COLD START BOOT)
; ENABLE RST0 AND RST7
DI
MVI A,12H ;INITIALIZE COMMAND
OUT REVRT
XRA A
OUT INTC ;CLEARED
MVI A,INTE ;RST0 AND RST7 BITS ON
OUT INTC
XRA A
OUT ICON ;INTERRUPT CONTROL
;
; SET DEFAULT BUFFER ADDRESS TO 80H
LXI B,BUFF
CALL SETDMA
;
; RESET MONITOR ENTRY POINTS
MVI A,JMP
STA 0
LXI H,WBOOTE
SHLD 1 ;JMP WBOOT AT LOCATION 00
STA 5
LXI H,BDOS
SHLD 6 ;JMP BDOS AT LOCATION 5
STA 7*8 ;JMP TO MON80 (MAY HAVE BEEN CHANGED BY DDT)
LXI H,MON80
SHLD 7*8+1
; LEAVE IOBYTE SET
; PREVIOUSLY SELECTED DISK WAS B, SEND PARAMETER TO CPM
LDA CDISK ;LAST LOGGED DISK NUMBER
MOV C,A ;SEND TO CCP TO LOG IT IN
EI
JMP CPMB
;
; ERROR CONDITION OCCURRED, PRINT MESSAGE AND RETRY
BOOTERR:
POP B ;RECALL COUNTS
DCR C
JZ BOOTER0
; TRY AGAIN
PUSH B
JMP WBOOT0
;
BOOTER0:
; OTHERWISE TOO MANY RETRIES
LXI H,BOOTMSG
CALL PRMSG
JMP RMON80 ;MDS HARDWARE MONITOR
;
BOOTMSG:
DB '?BOOT',0
;
;
CONST: ;CONSOLE STATUS TO REG-A
; (EXACTLY THE SAME AS MDS CALL)
JMP CSTS
;
CONIN: ;CONSOLE CHARACTER TO REG-A
CALL CI
ANI 7FH ;REMOVE PARITY BIT
RET
;
CONOUT: ;CONSOLE CHARACTER FROM C TO CONSOLE OUT
JMP CO
;
LIST: ;LIST DEVICE OUT
; (EXACTLY THE SAME AS MDS CALL)
JMP LO
;
PUNCH: ;PUNCH DEVICE OUT
; (EXACTLY THE SAME AS MDS CALL)
JMP PO
;
READER: ;READER CHARACTER IN TO REG-A
; (EXACTLY THE SAME AS MDS CALL)
JMP RI
;
HOME: ;MOVE TO HOME POSITION
; TREAT AS TRACK 00 SEEK
MVI C,0
JMP SETTRK
;
SELDSK: ;SELECT DISK GIVEN BY REGISTER C
; CP/M HAS CHECKED FOR DISK SELECT 0 - 3, BUT WE MAY HAVE
; A SMALLER MDS SYSTEM, SO CHECK AGAIN AND GIVE ERROR
; BY CALLING MON80
MOV A,C
CPI NDISKS ;TOO LARGE?
CNC RMON80 ;GIVES #ADDR MESSAGE AT CONSOLE
;
ANI 10B ;00 00 FOR DRIVE 0,1 AND 10 10 FOR DRIVE 2,3
STA DBANK ;TO SELECT DRIVE BANK
MOV A,C ;00, 01, 10, 11
ANI 1B ;MDS HAS 0,1 AT 78, 2,3 AT 88
ORA A ;RESULT 00?
JZ SETDRIVE
MVI A,00110000B ;SELECTS DRIVE 1 IN BANK
SETDRIVE:
MOV C,A ;SAVE THE FUNCTION
LXI H,IOF ;IO FUNCTION
MOV A,M
ANI 11001111B ;MASK OUT DISK NUMBER
ORA C ;MASK IN NEW DISK NUMBER
MOV M,A ;SAVE IT IN IOPB
RET
;
;
SETTRK: ;SET TRACK ADDRESS GIVEN BY C
LXI H,IOT
MOV M,C
RET
;
SETSEC: ;SET SECTOR NUMBER GIVEN BY C
MOV A,C ;SECTOR NUMBER TO ACCUM
STA IOS ;STORE SECTOR NUMBER TO IOPB
RET
;
SETDMA: ;SET DMA ADDRESS GIVEN BY REGS B,C
MOV L,C
MOV H,B
SHLD IOD
RET
;
READ: ;READ NEXT DISK RECORD (ASSUMING DISK/TRK/SEC/DMA SET)
MVI C,READF ;SET TO READ FUNCTION
CALL SETFUNC
CALL WAITIO ;PERFORM READ FUNCTION
RET ;MAY HAVE ERROR SET IN REG-A
;
;
WRITE: ;DISK WRITE FUNCTION
MVI C,WRITF
CALL SETFUNC ;SET TO WRITE FUNCTION
CALL WAITIO
RET ;MAY HAVE ERROR SET
;
;
; UTILITY SUBROUTINES
PRMSG: ;PRINT MESSAGE AT H,L TO 0
MOV A,M
ORA A ;ZERO?
RZ
; MORE TO PRINT
PUSH H
MOV C,A
CALL CONOUT
POP H
INX H
JMP PRMSG
;
SETFUNC:
; SET FUNCTION FOR NEXT I/O (COMMAND IN REG-C)
LXI H,IOF ;IO FUNCTION ADDRESS
MOV A,M ;GET IT TO ACCUMULATOR FOR MASKING
ANI 11111000B ;REMOVE PREVIOUS COMMAND
ORA C ;SET TO NEW COMMAND
MOV M,A ;REPLACED IN IOPB
; THE MDS-800 CONTROLLER REQUIRES DISK BANK BIT IN SECTOR BYTE
; MASK THE BIT FROM THE CURRENT I/O FUNCTION
ANI 00100000B ;MASK THE DISK SELECT BIT
LXI H,IOS ;ADDRESS THE SECTOR SELECT BYTE
ORA M ;SELECT PROPER DISK BANK
MOV M,A ;SET DISK SELECT BIT ON/OFF
RET
;
WAITIO:
MVI C,RETRY ;MAX RETRIES BEFORE PERM ERROR
REWAIT:
; START THE I/O FUNCTION AND WAIT FOR COMPLETION
CALL INTYPE ;IN RTYPE
CALL INBYTE ;CLEARS THE CONTROLLER
;
LDA DBANK ;SET BANK FLAGS
ORA A ;ZERO IF DRIVE 0,1 AND NZ IF 2,3
MVI A,IOPB AND 0FFH ;LOW ADDRESS FOR IOPB
MVI B,IOPB SHR 8 ;HIGH ADDRESS FOR IOPB
JNZ IODR1 ;DRIVE BANK 1?
OUT ILOW ;LOW ADDRESS TO CONTROLLER
MOV A,B
OUT IHIGH ;HIGH ADDRESS
JMP WAIT0 ;TO WAIT FOR COMPLETE
;
IODR1: ;DRIVE BANK 1
OUT ILOW+10H ;88 FOR DRIVE BANK 10
MOV A,B
OUT IHIGH+10H
;
WAIT0: CALL INSTAT ;WAIT FOR COMPLETION
ANI IORDY ;READY?
JZ WAIT0
;
; CHECK IO COMPLETION OK
CALL INTYPE ;MUST BE IO COMPLETE (00) UNLINKED
; 00 UNLINKED I/O COMPLETE, 01 LINKED I/O COMPLETE (NOT USED)
; 10 DISK STATUS CHANGED 11 (NOT USED)
CPI 10B ;READY STATUS CHANGE?
JZ WREADY
;
; MUST BE 00 IN THE ACCUMULATOR
ORA A
JNZ WERROR ;SOME OTHER CONDITION, RETRY
;
; CHECK I/O ERROR BITS
CALL INBYTE
RAL
JC WREADY ;UNIT NOT READY
RAR
ANI 11111110B ;ANY OTHER ERRORS? (DELETED DATA OK)
JNZ WERROR
;
; READ OR WRITE IS OK, ACCUMULATOR CONTAINS ZERO
RET
;
WREADY: ;NOT READY, TREAT AS ERROR FOR NOW
CALL INBYTE ;CLEAR RESULT BYTE
JMP TRYCOUNT
;
WERROR: ;RETURN HARDWARE MALFUNCTION (CRC, TRACK, SEEK, ETC.)
; THE MDS CONTROLLER HAS RETURNED A BIT IN EACH POSITION
; OF THE ACCUMULATOR, CORRESPONDING TO THE CONDITIONS:
; 0 - DELETED DATA (ACCEPTED AS OK ABOVE)
; 1 - CRC ERROR
; 2 - SEEK ERROR
; 3 - ADDRESS ERROR (HARDWARE MALFUNCTION)
; 4 - DATA OVER/UNDER FLOW (HARDWARE MALFUNCTION)
; 5 - WRITE PROTECT (TREATED AS NOT READY)
; 6 - WRITE ERROR (HARDWARE MALFUNCTION)
; 7 - NOT READY
; (ACCUMULATOR BITS ARE NUMBERED 7 6 5 4 3 2 1 0)
;
; IT MAY BE USEFUL TO FILTER OUT THE VARIOUS CONDITIONS,
; BUT WE WILL GET A PERMANENT ERROR MESSAGE IF IT IS NOT
; RECOVERABLE. IN ANY CASE, THE NOT READY CONDITION IS
; TREATED AS A SEPARATE CONDITION FOR LATER IMPROVEMENT
TRYCOUNT:
; REGISTER C CONTAINS RETRY COUNT, DECREMENT 'TIL ZERO
DCR C
JNZ REWAIT ;FOR ANOTHER TRY
;
; CANNOT RECOVER FROM ERROR
MVI A,1 ;ERROR CODE
RET
;
; INTYPE, INBYTE, INSTAT READ DRIVE BANK 00 OR 10
INTYPE: LDA DBANK
ORA A
JNZ INTYP1 ;SKIP TO BANK 10
IN RTYPE
RET
INTYP1: IN RTYPE+10H ;78 FOR 0,1 88 FOR 2,3
RET
;
INBYTE: LDA DBANK
ORA A
JNZ INBYT1
IN RBYTE
RET
INBYT1: IN RBYTE+10H
RET
;
INSTAT: LDA DBANK
ORA A
JNZ INSTA1
IN DSTAT
RET
INSTA1: IN DSTAT+10H
RET
;
;
;
; DATA AREAS (MUST BE IN RAM)
DBANK: DB 0 ;DISK BANK 00 IF DRIVE 0,1
; 10 IF DRIVE 2,3
IOPB: ;IO PARAMETER BLOCK
DB 80H ;NORMAL I/O OPERATION
IOF: DB READF ;IO FUNCTION, INITIAL READ
ION: DB 1 ;NUMBER OF SECTORS TO READ
IOT: DB OFFSET ;TRACK NUMBER
IOS: DB 1 ;SECTOR NUMBER
IOD: DW BUFF ;IO ADDRESS
;
;
END
;


Next steps are to extract all files in each *.RAW Image. Zip the Disk*.*, README.1st, Sorcerer Definitions for cpmtools & libdsk,
and any other information that should be attached.

And get those zips to Bitsavers, and whoever else is storing any Exidy Sorcerer Files.

Thanks goes to Chuck(G) for the research of the Image layout, so cpmtools could access the .RAW Images, that were created from
the 6 ???disk?.dsk images.


Larry
 
Last edited:
Back
Top