TITLE SYSGEN SUBTTL System generation program .COMMENT \ Thi i rewritte versio o SYSGE 2. modifie t ru o CP/ 2.0 I use th dis paramete block an secto ske table supplie b th user' BIOS s tha thes d no hav t resid withi th progra itself resultin i differen version o SYSGE fo eac typ o drive Thi versio i universa an ma b use o an driv wher th operatin syste i o th firs track o th dis an th firs physica secto numbe i one I ma eve b use t transfe a operatin syste fro on typ o driv t another Digita Researc neglecte writin ne versio o SYSGE whe the release CP/ 2.0 s PC System wrot thi version NOTE: This version (SYSGENB2) has been modified such that it will automatically sysgen disc B once it has been called with a modifier (ie, SYSGENB2 CPM56B31.COM, for instance.) No further inputs from the keyboard are required.\ .Z80 CR EQU 0DH LF EQU 0AH WBOOT EQU 0 BDOS EQU 5 TFCB EQU 5CH CPMADD EQU 900H SYSGEN: JP START DEFB "Copyright (c) 1979, PCE Systems" CPMLEN: DEFW 51 ;NUMBER OF SECTORS IN CPM SYSTEM-1 SHIFT: LD H,A LD L,0 SRL H RR L RET INPDRV: LD C,1 CALL BDOS CP "a" RET C ;IF <"a" CP "z"+1 RET NC ;IF >"z" AND 01011111B RET CONOUT: LD E,A LD C,2 JP BDOS NEWLIN: LD A,CR CALL CONOUT LD A,LF JR CONOUT NEWOUT: PUSH HL CALL NEWLIN POP HL OUTBUF: LD A,(HL) OR A RET Z PUSH HL CALL CONOUT POP HL INC HL JR OUTBUF SELDS1: LD C,A LD HL,(WBOOT+1) LD DE,18H ADD HL,DE ;COMPUTE ADDRESS OF SELDSK ENTRY TO BIOS JP (HL) SELDSK: CALL SELDS1 PUSH HL LD A,H OR L JR NZ,SELDS2 POP HL RET SELDS2: POP HL LD E,(HL) INC HL LD D,(HL) LD (SKEW),DE LD DE,9 ADD HL,DE LD E,(HL) INC HL LD D,(HL) EX DE,HL LD E,(HL) INC HL LD D,(HL) LD (MAXSEC),DE LD HL,(CPMLEN) LD BC,0 ANOTRK: INC BC OR A ;CLEAR CARRY FLAG SBC HL,DE JR NC,ANOTRK LD (MAXTRK),BC RET SETTRK: LD HL,(WBOOT+1) LD DE,1BH ADD HL,DE JP (HL) SETSEC: LD HL,(WBOOT+1) LD DE,1EH ADD HL,DE JP (HL) SETDMA: LD HL,(WBOOT+1) LD DE,21H ADD HL,DE JP (HL) READ: LD HL,(WBOOT+1) LD DE,24H ADD HL,DE JP (HL) WRITE: LD HL,(WBOOT+1) LD DE,27H ADD HL,DE JP (HL) SECTRN: LD HL,(WBOOT+1) PUSH DE LD DE,2DH ADD HL,DE POP DE JP (HL) READNR: LD C,14H JP BDOS DISKIO: LD HL,CPMADD-80H LD (TRANAD),HL LD HL,-1 LD (TRACK),HL FSTSEC: LD HL,(TRACK) INC HL LD (TRACK),HL LD DE,(MAXTRK) OR A SBC HL,DE RET Z LD BC,(TRACK) CALL SETTRK LD HL,-1 LD (SECTOR),HL NXTSEC: LD HL,(SECTOR) INC HL LD (SECTOR),HL LD DE,(MAXSEC) OR A SBC HL,DE JR Z,NXTTRK LD BC,(SECTOR) LD DE,(SKEW) CALL SECTRN LD B,H LD C,L PUSH BC CALL SETSEC POP BC LD A,C CALL SHIFT EX DE,HL LD HL,(TRANAD) ADD HL,DE LD B,H LD C,L CALL SETDMA XOR A LD (NTIMES),A DSKERR: LD A,(NTIMES) CP 10 JR C,TRYAGN LD HL,PERMSG CALL OUTBUF CALL INPDRV CP CR JP NZ,WBOOT CALL NEWLIN JR NXTSEC TRYAGN: INC A LD (NTIMES),A LD A,(RWFLAG) OR A JR Z,READ1 CALL WRITE JR SKIPRD READ1: CALL READ SKIPRD: OR A JR Z,NXTSEC JR DSKERR NXTTRK: LD A,(MAXSEC) CALL SHIFT EX DE,HL LD HL,(TRANAD) ADD HL,DE LD (TRANAD),HL JP FSTSEC START: LD C,12 ;RETURN VERSION NUMBER CALL BDOS LD A,H OR L JR NZ,START1 LD HL,OLDMSG JP OUTBUF START1: LD HL,SYSMSG CALL OUTBUF LD A,(TFCB+1) CP " " JR Z,SOURCE LD DE,TFCB LD C,0FH ;OPEN FILE CALL BDOS INC A JR NZ,EXISTS LD HL,NSCMSG JP NEWOUT EXISTS: XOR A LD (TFCB+32),A LD B,10H ;NUMBER OF RECORDS TO SKIP SKPAGN: PUSH BC LD DE,TFCB CALL READNR POP BC OR A JR Z,NOTDON LD HL,INCMSG JP NEWOUT NOTDON: DJNZ SKPAGN LD HL,CPMADD READAG: PUSH HL LD B,H LD C,L CALL SETDMA LD DE,TFCB CALL READNR POP HL OR A JR NZ,DEST LD DE,80H ;NUMBER OF BYTES IN A SECTOR ADD HL,DE JR READAG SOURCE: LD HL,SRCMSG CALL NEWOUT CALL INPDRV CP CR JR Z,DEST LD (DRVSRC),A SUB "A" CALL SELDSK JR C,DRVOK CALL INVDRV JR SOURCE DRVOK: CALL NEWLIN LD HL,GETMSG CALL OUTBUF CALL INPDRV CP CR RET NZ CALL NEWLIN XOR A LD (RWFLAG),A CALL DISKIO LD HL,CPLMSG CALL OUTBUF DEST: LD HL,DESMSG CALL NEWOUT LD A,"B" ;FORCE B DRIVE ACCEPT CP CR JP Z,WBOOT LD (DRVDES),A SUB "A" CALL SELDSK JR C,DRVOK1 CALL INVDRV JR DEST DRVOK1: LD HL,PUTMSG CALL NEWOUT LD A,0DH ;FORCE LOAD CP CR JP NZ,WBOOT CALL NEWLIN LD HL,RWFLAG LD (HL),1 CALL DISKIO LD HL,CPLMSG CALL OUTBUF JP WBOOT ;DONE, GO HOME INVDRV: LD HL,INVMSG JP NEWOUT OLDMSG: DEFB "Requires CP/M version 2.0 or later.",0 SYSMSG: DEFB "SYSGEN Version 2.0",0 SRCMSG: DEFB "Source drive name (or RETURN to skip):",0 GETMSG: DEFB "Source on " DRVSRC: DEFB " , then type RETURN:",0 DESMSG: DEFB "Destination drive name (or RETURN to reboot):",0 PUTMSG: DEFB "Destination on " DRVDES: DEFB " , then type RETURN:",0 PERMSG: DEFB "Permanent error, type RETURN to ignore:",0 CPLMSG: DEFB "Function complete.",0 INVMSG: DEFB "Invalid drive name.",0 NSCMSG: DEFB "No source file on disk.",0 INCMSG: DEFB "Source file incomplete.",0 TRACK: DEFS 2 SECTOR: DEFS 2 RWFLAG: DEFS 1 TRANAD: DEFS 2 NTIMES: DEFS 1 MAXTRK: DEFS 2 MAXSEC: DEFS 2 SKEW: DEFS 2 END SYSGEN