home *** CD-ROM | disk | FTP | other *** search
- .Z80
- ;
- ; AUTO - SET UP CP/M INITIAL COMMAND
- ;
- ; (THE "LOOK - NO HANDS" APPROACH TO COMPUTING)
- ;
- ; DOC: THIS PROGRAM INSERTS AN INITIAL COMMAND INTO THE CCP COMMAND LINE
- ; BUFFER ON THE DEFAULT DRIVE SYSTEM TRACKS. BEFORE INSTALLING,
- ; CHECK THAT THE SECTOR ADDRESSES USED MATCH YOUR SYSTEM. SOME
- ; SYSTEMS RESERVE A PHYSICAL SECTOR FOR THE COLD BOOT ROUTINE, THIS
- ; VERSION OF THE CODE ASSUMES ONE LOGICAL SECTOR IS USED.
- ;
- INIT EQU $
- LD HL,0
- ADD HL,SP ;SAVE STACK PTR IN HL
- LD SP,8000H ;SET NEW STACK PTR
- PUSH HL ;SAVE OLD STACK POINTER ON NEW STACK
- ;
- ; COPY BIOS JUMP TABLE SO THAT WE CAN USE IT
- ;
- LD HL,(1) ;BIOS JUMP TABLE ADDRESS
- LD DE,BIOSTB ;OUR JUMP TABLE ADDRESS
- LD BC,TABLEN ;LENGTH OF TABLE
- LDIR ;COPY IT
- ;
- ; CALL BIOS TO SET UP AND READ DISK
- ;
- LD BC,0 ;SET DISK TO 0
- CALL $SELDK ;CALL BIOS
- CALL $HOME ;HOME IT TO CLEAR OUTSTANDING I/O
- LD C,1
- CALL $SETSC ;SET SECTOR 1
- LD BC,0
- CALL $SETTK ;SET TRACK 0
- LD BC,SECTR1
- CALL $SETDA ;SET BUFFER ADDRESS
- ;
- CALL $READ ;READ SECTOR 1
- ;
- LD C,2
- CALL $SETSC ;SET SECTOR 2
- LD BC,SECTR2
- CALL $SETDA ;SET BUFFER ADDRESS
- ;
- CALL $READ ;READ SECTOR 2
- ;
- ; UPDATE CCP COMMAND BUFFER WITH CONTENTS OF COMMAND LINE
- ; NOTE WE MUST CLEAR UNWANTED SPACES FROM START OF LINE
- ;
- LD HL,080H ;DEFAULT COMMAND LINE
- LD A,(HL)
- LD C,A ;GET LENGTH OF COMMAND
- SKIPSP EQU $ ;LOOP - SKIP LEADING SPACES
- INC HL
- LD A,(HL) ;LOOK AT FIRST CHARACTER
- CP ' '
- JR NZ,SKIP1 ;EXIT IF NOT SPACE
- DEC C ;DECREMENT LENGTH
- JR NZ,SKIPSP ;UNTIL END OF COMMAND
- SKIP1 EQU $
- LD DE,SECTR1+6 ;DEFAULT CCP COMMAND AREA
- POS0 EQU $ ;LOOP - LOCATE BUFFER LENGTH BYTE
- LD A,(DE)
- CP 07FH
- JP Z,POS1 ;EXIT IF FOUND
- INC DE
- INC DE
- INC DE ;INC PAST JUMP
- JP POS0
- POS1 EQU $
- INC DE
- LD A,C ;GET FINAL LENGTH OF COMMAND
- LD (DE),A ;PUT LENGTH INTO BUFFER
- INC C ;COPY CMD + TRAILING NULL
- LD B,0
- INC DE ;DE POINTS TO START OF COMMAND
- LDIR ;MOVE COMMAND TO DISK BUFFER
- ;
- ; NOW WRITE OUT THE UPDATED SECTORS AGAIN
- ;
- LD C,1
- CALL $SETSC ;SET SECTOR 1
- LD BC,SECTR1
- CALL $SETDA ;SET BUFFER ADDRESS
- CALL $WRITE ;WRITE SECTOR 1
- ;
- LD C,2
- CALL $SETSC ;SET SECTOR 2
- LD BC,SECTR2
- CALL $SETDA ;SET BUFFER ADDRESS
- CALL $WRITE ;WRITE SECTOR 2
- ;
- CALL $HOME ;CALL HOME TO ENSURE BUFFER IS WRITTEN
- POP HL
- LD SP,HL ;RESTORE OLD STACK POINTER
- RET ;RETURN TO CCP
- ;
- ; BIOS INDIRECT CALLS
- ; WILL BE FILLED IN BY COPYING IN BIOS JUMP TABLE
- ;
- BIOSTB EQU $
- $WBOOT: DS 3 ;JP WBOOT
- $CONST: DS 3 ;JP CONST
- $CONIN: DS 3 ;JP CONIN
- $CONOT: DS 3 ;JP CONOUT
- $LIST: DS 3 ;JP LIST
- $PUNCH: DS 3 ;JP PUNCH
- $READR: DS 3 ;JP READER
- $HOME: DS 3 ;JP HOME
- $SELDK: DS 3 ;JP SELDSK
- $SETTK: DS 3 ;JP SETTRK
- $SETSC: DS 3 ;JP SETSEC
- $SETDA: DS 3 ;JP SETDMA
- $READ: DS 3 ;JP READ
- $WRITE: DS 3 ;JP WRITE
- $LSTST: DS 3 ;JP LISTST
- $SECTR: DS 3 ;JP SECTRN
- ;
- TABLEN EQU $-BIOSTB ;COMPUTE LENGTH TO COPY
- ;
- SECTR1 EQU $
- SECTR2 EQU $+128
- END INIT