; 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