home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol020
/
disk.z80
< prev
next >
Wrap
Text File
|
1984-04-29
|
5KB
|
258 lines
TITLE DISK SUBSYSTEM FOR SYSTEM MONITOR
;
;****Donated to the Pascal/Z80 Users Group, July 1980*******
;
; FLOPPY DISK SUBSYSTEM FOR THE SYSTEM MONITOR
; IT INTERTIES CP/M TO THE MONITOR SO THAT BOTH
; PACKAGES OPERATE AS AN INTEGRATED WHOLE
;
; MODIFIED FOR C-MACRO ASSEMBLER MAY 1979
;
; DEFINE SYMBOLS
;
;SYSTEM BASES
;MBASE IS MONITOR BASE ADDR
;CBASE IS CONSOLE SUBSYSTEM BASE ADDR
;DWBASE IS THE DISK VARIABLE RAM BASE ADDR
;FBBASE IS CP/M BIOS BASE ADDR
;
;EXTERNAL CALLS
;
DCNSTA DEFL CBASE+3
DCONIN DEFL CBASE+6
DCNOUT DEFL CBASE+24
DLIST DEFL CBASE+12
DBUFFO DEFL CBASE+21H ;OUTPUT A MESSAGE TO CONSOLE
GOBACK DEFL MBASE+3 ;RESTART MONITOR
LOADER DEFL FBBASE+2DH ;SD SALES LOADER
;
; THIS SUBSYSTEM WILL PATCH THE CP/M
; BIOS VECTOR JUMP TABLE ON THE END OF BDOS OF CP/M
; TO TRAP CONSOLE I/O FOR MONITOR INTERTIE.
;
;INTERNAL SYMBOLS
;
CR DEFL 0DH
LF DEFL 0AH
EOM DEFL 00H
FCB DEFL DWBASE+10
BDOS DEFL 05H
INITCM DEFL 13
OPENCM DEFL 15
READCM DEFL 20
SDMACM DEFL 26
STATCM DEFL 11
;
;ENTRY VECTORS
;
DBASE EQU $
DNTRY0 JP DINIT ;DISK SUBSYSTEM INITIALIZATION
DNTRY1 JP DMAIN ;DISK TRANSIENT FILE LOADER
DNTRY2 JP DTRAP ;DISK BOOT TRAP VECTOR
;
;DEFINED CONSTANTS FOR SUBSYSTEM
;
DWORK DEFW DWBASE ;VARIABLE RAM ADDR POINTER
;
; INITIALIZE THE SUBSYSTEM
;
DINIT CALL DSETUP
LD A,0FFH
LD (IY-1),A
POP IY
RET
;
DSETUP EX (SP),IY
PUSH IY
LD IY,(DWORK)
RET
;
; BOOT TRAP VECTOR
;
DTRAP CALL DCONIN
CP 03H
JP Z,GOBACK ;CONTROL-C ENCOUNTER
RET ;ELSE RETURN TO TRANSIENT
;
; DISK SUBSYSTEM MAIN ENTRY
;
DMAIN CALL DSETUP
PUSH AF
PUSH BC
PUSH IX
LD HL,0
ADD HL,SP
LD (IY-3),L
LD (IY-2),H
JP BOOT
;
; CONTINUE WITH LOADING REQUESTED UTILITY
;
DBACK LD L,(IY-3)
LD H,(IY-2)
LD SP,HL
POP IX
POP BC
PUSH IY
POP DE
XOR A
LD (DE),A
INC DE
POP AF
OR A
JP Z,DCOPY
JP DVERFY
;
; COPY COMMAND FILE SET
;
DCOPY LD HL,CPYBLK
JP BFCB
;
; VERIFY COMMAND FILE SET
;
DVERFY LD HL,VFYBLK
;
; BUILD FILE CONTROL BLOCK
;
BFCB PUSH BC ;BUILD COPY OR VRFY
LD BC,4
LDIR
POP BC ;BUILD SOURCE/DESTINATION CODE
LD A,B
LD (DE),A
INC DE
LD A,C
LD (DE),A
LD A,20H
INC DE
LD (DE),A
INC DE
LD (DE),A
INC DE ;BUILD FILE TYPE 'SMC'
LD HL,COMBLK
LD BC,3
LDIR
XOR A
LD (DE),A
LD (IY+32),A
;
; INITIALIZE CP/M AND OPEN FILE
;
LD C,INITCM
CALL BDOS
PUSH IY ;OPEN FILE
POP DE
LD C,OPENCM
CALL BDOS
INC A
JP Z,NOFILE ;IF NO FILE IS FOUND
LD HL,DMSG1 ;SEND MESSAGE 'FOUND FILE'
CALL DBUFFO
;
; LOAD FILE INTO MEMORY STARTING AT 0100H
;
LD HL,0100H
PUSH HL
;
LOOP POP DE ;GET NEXT RECORD ADDRESS
PUSH DE ;SAVE IT
LD C,SDMACM;GIVE IT TO CP/M
CALL BDOS
PUSH IY
POP DE
LD C,READCM;GET NEXT RECORD
CALL BDOS
OR A
JP NZ,DDONE ;IF COMPLETE OR READ ERROR
POP DE ;INC TO NEXT RECORD BLOCK
LD HL,128 ;GET NO OF BYTES PER RECORD
ADD HL,DE
PUSH HL ;SAVE NEW RECORD ADDRESS
JP LOOP
;
; LOADING IS COMPLETE OR ERROR ENCOUNTERED
;
DDONE DEC A
JP NZ,DERROR ;IF ERROR
LD HL,GOBACK ;LOAD RESTART ADDRESS
EX (SP),HL ;PUSH IT ONTO THE STACK
JP 0100H ;JUMP TO THE TRANSIENT ROUTINE
;
; ERROR MESSAGE AND VECTOR BACK TO MONITOR
;
DERROR LD HL,DMSG2
VBACK CALL DBUFFO
LD HL,GOBACK
JP (HL)
;
; ESCAPE .. A KEY WAS PRESSED
;
DGTOUT LD HL,DMSG3
JP VBACK
;
; NO FILE MESSAGE
;
NOFILE LD HL,DMSG4
JP VBACK
;
; MESSAGE MACROS
;
DMSG1 DEFB CR,LF,'FOUND FILE',EOM
;
DMSG2 DEFB CR,LF,'DISK READ ERROR',EOM
DMSG3 DEFB CR,LF,'ESCAPE',EOM
;
DMSG4 DEFB CR,LF,'FILE NOT FOUND',EOM
;
; FILE NAME AND EXTENT BLOCKS
;
CPYBLK DEFB 'COPY'
VFYBLK DEFB 'VRFY'
COMBLK DEFB 'SMC'
;
; BOOT UP CP/M SYSTEM AND MODIFY
; (THIS BOOT IS FOR SD SALES VERSAFLOOPY)
; SET AT REAR OF DISK SUBSYSTEM FOR EASY MODIFICATION
;
BOOT LD SP,80H ;SET BOOT STACK
LD HL,80H
LD (40H),HL ;DMA ADDRESS (0000H)
XOR A
LD (42H),A ;LOAD DRIVE NO
LD (44H),A ;LOAD TRACK NO
INC A
LD (43H),A ;LOAD SECTOR NO
LD (45H),A ;NO OF SECTORS TO LOAD
CALL LOADER ;CALL SD VF LOADER
JP NZ,BTERR ;BAD LOAD
LD HL,BRETN ;LD RETURN VECTOR
LD (0C1H),HL
JP 80H
;
BRETN LD HL,(06H) ;RETURNED SUCCESSFULLY
LD L,00 ;GET JUMP VECTOR LOCATION
LD BC,0D07H ;FOR CONIN MONITORING
ADD HL,BC
LD DE,DCNSTA
CALL BRETNL
LD DE,DTRAP ;SET UP TRAP
CALL BRETNL
LD DE,DCNOUT
CALL BRETNL
LD DE,DLIST
CALL BRETNL
JP DBACK
;
BRETNL LD (HL),E
INC HL
LD (HL),D
INC HL
INC HL
RET
;
BTERR LD HL,DMSG5
JP VBACK
;
DMSG5 DEFB CR,LF,'BOOT LOADING ERROR',EOM
;