home *** CD-ROM | disk | FTP | other *** search
- ; 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
-