home *** CD-ROM | disk | FTP | other *** search
- 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
- ;
-