; ;====================================================================== ;====================================================================== ; ; START OF NONRESIDENT PORTION OF DUP.SYS ; DATA DS 80 ;ALLOCATE BUFFER FOR BIT MAP, ETC. DELIM DS 1 PAR2 DS 20 ;PAR* BUFFERS EXPANDED TO 80 BYTES FROM 32 PAR3 DS 80 ; BY BOB PUFF, VERSION 4.5 (PAR2 WAS OK) BOOTBUF DS 384 ;SPACE FOR 3 BOOT SECTORS TEMPBUF DS 128 ;TEMPORARY BUFFER FOR FILE OPEN DENSITY INIT. ; ; ORG DATA+512 ;USE THIS ORG ONLY IF ABOVE ALLOCS < 512 BYTES ; UNNO DS 1 PTR DS 1 PTRSAV DS 1 IPTR DS 1 IPSAV DS 1 CBYTE DS 1 SECTOR DS 2 CSRC DS 1 CDES DS 1 CPYTYP DS 1 SWPFLG DS 1 RCNT DS 1 SECSIZ DS 2 FNPT DS 1 FNPT2 DS 1 PAR DS 80 ;REAL PARAMETER (LAST) DUPBASE = * DOSSYS DB 'D1:DOS.SYS',$9B ; ; CLOSE (BRUTALLY) ALL IOCBS AND REOPEN SCREEN ; INITIO JSR CIOINV LDX #0 JSR SOPEN ;OPEN SCREEN AS IOCB #0 DB $0C DB OPEN DW EC STX CDTMV3 ;CLEAR TIMER #3 STX CDTMV3+1 LDY #1 LDA #3 STA CDTMF3 ;SET TIMER NOT DONE FLAG JSR SETVBV WAITIM LDA CDTMF3 ;DONE? BNE WAITIM ;NO, CONTINUE LOOPING RTS ; ; DISK UTILITY PROGRAM ENTRY ; DOSOS CLC CLD LDX #-3 HATLP INX INX INX LDA HATABS,X ;REINSTALL E: HANDLER TO CMP #'E' ;AVOID DELETING BASIC PROGRAMS BNE HATLP ;STARTED UP BY AUTORUN.SYS LDA #LOW[EDITRV] ;"E:" HANDLER SIMULATORS STA HATABS+1,X LDA #HIGH[EDITRV] ;REMOVED BY BOB PUFF IN 4.5 [Change for scripts] STA HATABS+2,X LDX #$FF STX BRKKEY ;ENABLE BREAK KEY ; LDA #HIGH[MDINIT] STA DOSINI+1 LDA #LOW[MDINIT] STA DOSINI ; LDA #2 STA LMARGN ;SET MARGINS LDA #39 STA RMARGN LDA DUPFLAG ORA STATE AND #$C1 CMP #$80 BNE NOSWF STA WARMST NOSWF LDA #$40 ORA STATE STA STATE ;ELSE, SAY IT WAS DONE LDA #$80 ORA POKMSK STA POKMSK ;ALLOW BREAK INTERRUPTS STA IRQEN JSR INITIO ;CLOSE ALL FILES ; LDA STATE AND #1 BEQ SHMEN JSR ERRXIT ;MEM.SAV ERROR CAN NOW BE SHOWN DB 'Error loading MEM.SAV or memory!',$9B,0 ; SHMEN LDA DFUNIT ORA #'0' STA DEFAULT LDX #28 LDY #8 DKSLP LDA #' ' STA D1STAT-2,X STA D1STAT-1,X STA D1STAT,X STA D1STAT+1,X CPY RAMDKU BNE CKHCD ;IF NOT RAM DISK LDA #'R' BNE SETUNI ; CKHCD LDA HDTAB+8-1,Y BEQ GENDCD ;IF NOT HARD DISK LDA #'H' SETUNI STA D1STAT,X BNE DKUNIN ; GENDCD LDA DKTYPE-1,Y BEQ NXTDKS LSR A ;DOUBLE DENSITY? LDA #'S' BCS DKSNGD ;NO, SINGLE LDA #'D' ;YES, DOUBLE DKSNGD STA D1STAT,X LDA DRVDEF-1,Y LSR A LDA #'-' BCC DKSSD LDA #'=' DKSSD STA D1STAT+1,X DKUNIN TYA ORA #'0' STA D1STAT-1,X NXTDKS DEX DEX DEX DEX DEY BNE DKSLP JSR PRINT DB $7D ;CLEAR SCREEN DB 'MYDOS 4.51 -- copyright 1989,' DC 'W','O','R','D','M','A','R','K' ; DB $9B,'DISKS: ' D1STAT DB '1S ' DB '2S ' DB '3S ' DB '4S ' DB '5S ' DB '6S ' DB '7S ' DB '8S' DB 'D: = D' DEFAULT DB '1:',0 LDA #LOW[FNAME] LDX #HIGH[FNAME] JSR PRTMSG ; JSR PRINT DB $9B,$9B DB '1-8.Dir of D1:-D8: *. Dir of D:',$9B DB 'A. Disk Directory K. Save Memory',$9B DB 'B. Run Cartridge L. Load Memory',$9B DB 'C. Copy File(s) M. Run at Address',$9B DB 'D. Delete File(s) N. Load MEM.SAV',$9B DB 'E. Rename File(s) O. Change Config.',$9B DB 'F. Lock File(s) P. Set Density',$9B DB 'G. Unlock File(s) Q. Make Directory',$9B DB 'H. Write DOS Files R. Pick Directory',$9B DB 'I. Initialize Disk S. Set RAMdisk #',$9B DB 'J. Duplicate Disk V. Set Verify Flag',$9B DB ' ',$9B,0 LDY CBSAV BPL MENUSL JSR CIOER1 ;IF LOAD ERROR, REPORT IT ; ; SELECT MENU FUNCTION ; MENUSL LDX #$FF TXS INX STX OPT ;OPT=00 IF NO OPTIONS STX SWPFLG STX CBSAV ;FOR DIR SCANS, SKIP NO EXTNS. JSR CLOSX ;CLOSE IOCBs 10 AND 20 LDX #$30 JSR CLOS2 ;AND IOCB 30 JSR PRINT DB 'Select Item (' DC 'R','E','T','U','R','N' DB ' for menu):',0 LDA #$40 ;FORCE UPPER CASE STA SHFLOK ORA STATE STA STATE ;SAY DUP.SYS IN MEMORY JSR CHRGET CMP #$9B BNE CKITEM JMP SHMEN ; CKFDIR CMP #'1' BCC CKFDD JMP FASTDIR CKFDD CMP #'*' BNE BADITM JMP FASTDD ; CKITEM CMP #'9'+1 BCC CKFDIR CMP #'A'+NFUNC BCS BADITM SBC #'A'-1 BCS ITEMV BADITM LDA #NFUNC ITEMV ASL A TAY LDA DUPJT,Y STA RAMLO LDA DUPJT+1,Y STA RAMLO+1 JMP PRTMEN ;GO TO MENU EXIT (WITH MESSAGE) ; TCOMND = * UCOMND = * NSI DB 'No such item!',$9B,0 JMP MENUSL ; DUPJT DW DIRLST-1,STCAR-1 DW CPYFIL-1,DELFIL-1 DW RENFIL-1,LKFIL-1 DW ULKFIL-1,WBOOT-1 DW FMTDSK-1,DUPDSK-1 DW SAVFIL-1,LDFIL-1 DW BRUN-1,MEMSAV-1 DW CONFGR-1,CHDISK-1 DW MKDIR-1,SETDIR-1 DW RAMDRV-1,TCOMND-1 DW UCOMND-1,VERIFY-1 NFUNC = [*-DUPJT]/2 DW NSI-1