home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol026
/
sysgen.z80
< prev
next >
Wrap
Text File
|
1984-04-29
|
3KB
|
139 lines
; THIS IS A PROGRAM TO SYSGEN A CP/M SYSTEM ON SD OR DD DISKS UESING
; MYDDBIOS.Z80 BIOS
; JOHN J MONAHAN VERSION 0.0 4/10/81
;
PROM: EQU 0F800H
;
;THIS SYSTEM WILL BE SIMILAR TO THE ORIGINAL
;THE USER WILL BE ASKED IF HE WANTS TO COPY THE FIRST TWO TRACKS
;FROM DISK A: OR FROM WHAT IS IN MEMORY ALREADY.
;THEN HE WILL BE ASKED IF HE WANTS IT TO GO TO DISK B: OR STAY IN MEMORY
;
;SET DMA TO 900H
;SET TO DRIVE A FOR DENSITY
;SET TO TRACK 0, SECTOR 1
;READ 2 TRACKS FROM DISK 1 (USEING MYDDBIOS.Z80 ROM)
;ASK USER IF HE WANTS TO COPY TO DISK B OR TO LEAVE
;IF LEAVE END
;OTHERWISE
;SET DMA BACK TO 900H
;SET TO DRIVE B FOR CORRECT DENSITY
;SET TO TRACK 0, SECTOR 1
;WRITE 2 TRACKS TO DISK 2
;
;
;EQUATE TABLE FOR BDOS
CONSTAT:EQU 11
CONIN: EQU 1
CONOUT: EQU 2
PRINTBUF:EQU 9
BDOS: EQU 5
;
ORG 100H
START: LD HL,0
ADD HL,SP
LD (OLDSTACK),HL
LD SP,NEWSTACK
SAVEOD: LD A,(42H)
LD (OLDDRIVE),A ;SAVE CURRENT DRIVE TYPE
LD A,(53H)
LD (OLDCOUNT),A ;SAVE CURRENT SECTORS/TRACK
QUESTION:LD DE,MSG11 ;WANT MEMORY OR DISKTRACK
LD C,PRINTBUF
CALL BDOS
LD C,CONIN ;GET THE ANSWER FROM KEYBOARD
CALL BDOS
AND 5FH ;CHANGE TO UPPER CASE ONLY
CP 'M'
JP Z,QUEST2
CP 'D'
JP Z,DISKA
CP 'S'
JP Z,DISKC
JP EXIT
;
DISKA: LD A,40H ;SET UNIT BYTE TO DRIVE A IN DOUBLE DENSITY
LD (42H),A
LD A,32H ;SET TO 50 SECTORS/TRACK
LD (53H),A
JP DISKLOAD
DISKC: LD A,0H ;SET UNIT BYTE TO DRIVE A IN SINGLE DENSITY
LD (42H),A
LD A,1AH ;SET TO 26 SECTORS/TRACK
LD (53H),A
;
DISKLOAD:
SETDMA: LD HL,900H
LD (40H),HL
SETSEC: LD A,1
LD (43H),A
SETTRK: LD A,0
LD (44H),A
SECN: LD A,52 ;NUMBER OF SECTORS TO READ
LD (45H),A
READ: CALL PROM+39H ;NOTE DIFFERENCE FROM STANDARD SD ROM--------
JP NZ,ERROR ;IF NON ZERO THEN PROBLEM
;
;GETS HERE WITH MEMORY AT 900H CONTAINING THE SYSTEM
;
QUEST2: LD DE,MSG12 ;DO YOU WANT TO LEAVE OR TO WRITE TO B
LD C,PRINTBUF
CALL BDOS
LD C,CONIN
CALL BDOS
AND 5FH
CP 'D'
JP Z,WRITB
CP 'S'
JP Z,WRITD
JP EXIT
;NOW WRITE TO THE DISK SELECTED
WRITB: LD A,41H ;FOR B: DOUBLE DENSITY
LD (42H),A
LD A,32H ;50 SECTORS/TRACK
LD (53H),A
JP SETD
WRITD: LD A,1H ;FOR D:SINGLE DENSITY
LD (42H),A
LD A,1AH ;26 SECTORS/TRACK
LD (53H),A
SETD: LD HL,900H
LD (40H),HL
SETS: LD A,1
LD (43H),A
SETT: LD A,0
LD (44H),A
SN: LD A,52 ;NUMBER OF SECTORS TO WRITE
LD (45H),A
WRITE: CALL PROM+36H ;NOTE DIFFERENCE FROM SD PROM-------
JP NZ,ERROR
JP QUEST2
;
EXIT: LD A,(OLDDRIVE)
LD (42H),A
LD A,(OLDCOUNT)
LD (53H),A
LD HL,(OLDSTACK)
LD SP,HL
JP 0H
;
ERROR: LD DE,MSG10
LD C,PRINTBUF
CALL BDOS
JP 0H
;
DEFS 40 ;SPACE FOR NEWSTACK
NEWSTACK:DEFS 2
OLDSTACK:DEFS 2
OLDDRIVE:DEFS 1
OLDCOUNT:DEFS 1
MSG10: DEFB 0AH,0DH,'Error in disk data',0DH,0AH,'$'
MSG11: DEFB 0AH,0AH,0DH,'If system is from a DOUBLE density disk enter D'
DEFB 0AH,0DH,'If system is from a SINGLE density disk enter S'
DEFB 0AH,0DH,'If system is already in RAM @ 900H enter M'
DEFB 0AH,0DH,'Enter CR to quit $'
MSG12: DEFB 0AH,0AH,0DH,'Enter D or S for density of destination drive'
DEFB 0AH,0DH,'Enter CR to quit $'
;END