home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ENTERPRS
/
CPM
/
UTILS
/
A
/
AUTO.ARK
/
AUTO.MAC
< prev
Wrap
Text File
|
1989-09-27
|
3KB
|
124 lines
.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