mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 17:04:19 +00:00
1581 lines
27 KiB
Plaintext
1581 lines
27 KiB
Plaintext
; NETWORK DISK OPERATING SYSTEM FOR CP/NET
|
||
;
|
||
; 1982.8.4. FOR BASE
|
||
; 1982.8.23. VER.1.01 NOS MODIFY
|
||
; 1982.10.8. VER.1.02
|
||
;
|
||
TITLE NETWORK DISK OPERATING SYSTEM FOR CP/NET SLAVE NOS
|
||
;
|
||
;
|
||
; EQUATIONS OF DATA
|
||
;
|
||
LF EQU 0AH ;LINE FEED
|
||
CR EQU 0DH ;CARRIAGE RETURN
|
||
FF EQU 0CH ;FORM FEED
|
||
EOF EQU 1AH ;CTRL-Z IS END OF FILE
|
||
;
|
||
FSEND EQU 0 ;SEND FORMAT CODE
|
||
FRECV EQU 1 ;RECEIVE FORMAT CODE
|
||
;
|
||
TOP EQU 0 ;TOP OF MEMORY
|
||
CDISK EQU 4 ;CURRENT DISK & USER CODE
|
||
BDOS EQU 5 ;BDOS ENTRY
|
||
SYSDMA EQU 80H ;SYSTEM DMA ADDRESS
|
||
;
|
||
SCTLNG EQU 128 ;ONE SECTOR LENGTH
|
||
;
|
||
NOFUNC EQU 8000H ;NO FUNCTION CODE IN CP/NET
|
||
;
|
||
; EQUATIONS OF DOS FUNCTION
|
||
;
|
||
CCNDIN EQU 3 ;CONSOLE INPUT WITH DEVICE CODE
|
||
CCNDOT EQU 4 ;CONSOLE OUTPUT WITH DEVICE CODE
|
||
CBUFPR EQU 9 ;BUFFER PRINT
|
||
CCONST EQU 11 ;GET CONSOLE STATUS
|
||
CGETVR EQU 12 ;GET VERSION NUMBER
|
||
CRSDSK EQU 13 ;RESET DISK
|
||
COPEN EQU 15 ;OPEN FILE
|
||
CSRFST EQU 17 ;SEARCH FIRST
|
||
CSRNXT EQU 18 ;SEARCH NEXT DIRECTORY
|
||
CREAD EQU 20 ;READ FILE
|
||
CSTDMA EQU 26 ;SET DMA ADDRESS
|
||
CSTUSC EQU 32 ;SET USER CODE
|
||
CRSDSN EQU 37 ;RESET DISK BY DISK VERCTOR
|
||
CBMAX EQU 47 ;MAX OF BDOS FUNCTION
|
||
;
|
||
CLOGIN EQU 64 ;LOGIN
|
||
CLOGOF EQU 65 ;LOGOFF
|
||
CNMAX EQU 74 ;MAX OF NDOS FUNCTION
|
||
;
|
||
; SLAVE CONFIGRATION TABLE
|
||
;
|
||
; -1 NETWORK STATUS
|
||
; 0 SLAVE PROCESSOR ID
|
||
; 1-32 A - P DISK DEVICE CODE
|
||
; 33-34 CONSOLE DEVICE
|
||
; 35-36 LIST DEVICE
|
||
; 37 LIST BUFFER COUNTER
|
||
; 38-42 MESSAGE HEADER FOR LIST OUT
|
||
; 43 LISTER DEVICE NUMBER
|
||
; 44-171 LIST OUT DATA BUFFER
|
||
;
|
||
; EACH DEVICE DATA USED 2 BYTES
|
||
; IN 1-36
|
||
; 1B:BIT 7 H ON NETWORK
|
||
; BIT 6 H SET UP IN DISK
|
||
; BIT 0-3 DEVICE NUMBER IN MASTER
|
||
; 2B:MASTER ID
|
||
;
|
||
;
|
||
; BIAS TO DATA IN CONFIGRATION TABLE
|
||
;
|
||
BSCONS EQU 33 ;BIAS TO CONSOLE DATA
|
||
BSLIST EQU 35 ;BIAS TO LISTER DATA
|
||
;
|
||
;
|
||
; ENTRY POINTS
|
||
;
|
||
NDOSTP: ;NDOS TOP FOR CCP LOADING
|
||
;
|
||
;
|
||
CPMIDC: ;CP/M ID CODE AREA 6 BYTES
|
||
;
|
||
JMP NDOSE ;DOS ENTRY
|
||
JMP COLDST ;COLD START ENTRY
|
||
;
|
||
NDOS: ;NDOS ENTRY
|
||
JMP NDOSE ;DOS ENTRY MAIN
|
||
JMP COLDST ;COLD START POINTER
|
||
;
|
||
; COMMENT
|
||
;
|
||
;
|
||
DB 'COPYRIGHT (C) 1980, DIGITAL RESEARCH '
|
||
;
|
||
; USER ID CODE FOR CP/NET
|
||
;
|
||
DB 0,0,0,0,0,0
|
||
;
|
||
;
|
||
DB 'MODIFY 1982.10.08'
|
||
;
|
||
; PARAMETER AREA
|
||
;
|
||
CONTAD: DW 0 ;CONFIGRATION TABLE ADDRESS
|
||
BDOSE: DW 0 ;BDOS ENTRY ADDRESS
|
||
CURDSK: DB 1 ;CURRENT DISK
|
||
DMAADD: DW SYSDMA ;DMA ADDRESS
|
||
USRCOD: DB 0 ;USER CODE
|
||
VERSION:DW 0 ;VERSION NUMBER
|
||
FLSRCH: DB 0 ;SEARCH DIRECTORY MODE -1 ON NETWORK
|
||
PNSRCH: DW 0 ;FCB POINTER FOR SEARCH NEXT
|
||
MDLIST: DB 0 ;LIST OUT MODE
|
||
;
|
||
; DOS WORKING
|
||
;
|
||
USTACK: DW 0 ;USER STACK SAVE BUFFER
|
||
FUNCOD: DB 0 ;FUNCTION CODE
|
||
PARAMT: DW 0 ;INPUT PARAMETER
|
||
MCRPNT: DW 0 ;MESSAGE CURRENT POINTER
|
||
LSTUNT: DB 0 ;LISTER UNIT IN MASTER
|
||
;
|
||
; BIOS ROUTINE TABLE 0 NO ROUTINE IN NDOS
|
||
;
|
||
TLBIOS:
|
||
DW 0 ;COLD BOOT
|
||
DW NWBOOT ;WARM BOOT
|
||
BCONST: DW NCONST ;CONSOLE STATUS
|
||
BCONIN: DW NCONIN ;CONSOLE INPUT
|
||
BCONOT: DW NCONOT ;CONSOLE OUTPUT
|
||
BLIST: DW NLIST ;LIST OUTPUT
|
||
DW 0,0,0
|
||
BSLDSK: DW NSLDSK ;SELECT DISK
|
||
DW 0,0,0,0,0
|
||
BLSTST: DW NLSTST ;LIST STATUS
|
||
DW 0
|
||
;
|
||
; FILE CONTROL BLOCK FOR CCP.SPR
|
||
;
|
||
CCPFCB:
|
||
DB 1,'CCP SPR',0
|
||
DS 20
|
||
;
|
||
; STACK AREA
|
||
;
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
DB 0C7H,0C7H,0C7H,0C7H,0C7H,0C7H
|
||
STACK:
|
||
;
|
||
; MESSAGE DATA
|
||
;
|
||
MSGTOP: ;MESSAGE AREA TOP
|
||
DB 0 ;MESSAGE FORMAT CODE
|
||
MSGID: DB 0 ;DESTINATION DEVICE ID CODE
|
||
DB 0 ;SOURCE DEVICE ID CODE
|
||
MSGFUN: DB 0 ;FUNCTION CODE
|
||
MSGSIZ: DB 0 ;MESSAGE SIZE-1
|
||
MSGDAT: ;DATA
|
||
DS 80 ;MESSAGE DATA AREA
|
||
;
|
||
; COLD START ROUTINE BROKEN BY CCP.SPR LOADING
|
||
;
|
||
COLDST:
|
||
CALL NTWKIN
|
||
ORA A
|
||
JNZ COLDSE ;INITIALIZE ERROR
|
||
MVI C,17 ;BIOS JUMP TABLE COUNT
|
||
LHLD TOP+1 ;GET BIOS WARM BOOT ROUTINE POINT
|
||
DCX H
|
||
LXI D,TLBIOS ;BIOS TRAP ROUTINE TABLE
|
||
COLDLP: ;BIOS ROUTINE POINTER CHANGE LOOP
|
||
PUSH B
|
||
LDAX D
|
||
MOV C,A
|
||
INX D
|
||
LDAX D ;GET TRAP DATA
|
||
MOV B,A
|
||
INX D
|
||
ORA C
|
||
JZ COLDLS ;NO TRAP ROUTINE IN NDOS
|
||
MOV A,M
|
||
DCX D
|
||
STAX D
|
||
DCX H
|
||
MOV A,M
|
||
DCX D
|
||
STAX D ;GET & SAVE CURRENT BIOS ROUTINE POINTER
|
||
INX D
|
||
INX D
|
||
MOV M,C
|
||
INX H
|
||
MOV M,B ;CHANGE TO TRAP ROUTINE
|
||
COLDLS:
|
||
INX H
|
||
INX H
|
||
INX H
|
||
POP B
|
||
DCR C
|
||
JNZ COLDLP ;TO NEXT POINT
|
||
CALL CNFTBL
|
||
INX H
|
||
SHLD CONTAD
|
||
LHLD BDOS+1 ;GET BDOS ENTRY POINT
|
||
SHLD BDOSE
|
||
LXI D,CPMIDC+6 ;CP/M ID CODE SET UP POINT
|
||
MVI B,6 ;CODE LENGTH IS 6 BYTES
|
||
DCX D
|
||
DCX H
|
||
MOV A,M
|
||
STAX D ;SET SAME CODE TO NDOS TOP
|
||
DCR B
|
||
JNZ $-5
|
||
MVI C,CGETVR
|
||
CALL BDOS ;GET VERSION NUMBER
|
||
SHLD VERSION
|
||
MVI C,CBUFPR
|
||
LXI D,CSTUP
|
||
CALL BDOS ;START UP COMMENT
|
||
JMP NWBOOT
|
||
;
|
||
COLDSE: ;INITIALIZE ERROR
|
||
MVI C,CBUFPR
|
||
LXI D,CSTFIL
|
||
CALL BDOS ;START UP FAILURE
|
||
JMP TOP ;RETURN TO CP/M SYSTEM
|
||
;
|
||
; COMMENTS FOR COLD START
|
||
;
|
||
CSTFIL: DB 'Failed to initialize network.',CR,LF
|
||
DB 'Cold Starting.$'
|
||
CSTUP: DB 'NDOS initialization complete.',CR,LF,'$'
|
||
;
|
||
; NDOS FUNCTION DECODING BODDY
|
||
;
|
||
NDOSE:
|
||
LXI H,0
|
||
MOV A,C
|
||
CPI CNMAX+1
|
||
JC $+6 ;OK IN RANGE
|
||
DCX H ;OVER SO ERROR RETURN
|
||
MOV A,H
|
||
RET
|
||
;
|
||
DAD SP
|
||
SHLD USTACK ;SAVE USER STACK
|
||
LXI SP,STACK ;SET NDOS STACK
|
||
LXI H,NDEND
|
||
PUSH H ;SET END ROUTINE POINTER
|
||
MVI A,CSRNXT
|
||
SUB C
|
||
JNZ NDOSES ;NOT SEARCH NEXT DIRECTORY
|
||
LHLD PNSRCH ;SEARCH NEXT DIRECTORY, SO SET UP FCB POINT
|
||
SHLD PARAMT
|
||
LDA FLSRCH
|
||
ORA A
|
||
JNZ NDOSEN ;ON NETWORK
|
||
LHLD BDOSE ;LOCAL DISK
|
||
PCHL
|
||
;
|
||
NDOSES:
|
||
DCR A
|
||
JNZ $+6 ;NOT SEARCH FIRST
|
||
STA FLSRCH ;SEARCH FIRST, SO FLAG CLEAR
|
||
XCHG
|
||
SHLD PARAMT ;SAVE PARAMETER
|
||
NDOSEN:
|
||
MOV A,C
|
||
STA FUNCOD ;SAVE FUNCTION CODE
|
||
STA MSGFUN
|
||
LXI H,MSGSIZ
|
||
MVI M,0 ;CLEAR SIZE
|
||
INX H
|
||
SHLD MCRPNT ;INITIALIZE MESSAGE POINTER
|
||
MVI B,0
|
||
LXI H,FNINDX
|
||
MOV A,C
|
||
CPI CBMAX+1
|
||
JC NDOSEB ;BDOS FUNCTION
|
||
SUI CLOGIN ;SUBTRUCT NDOS TOP VALUE
|
||
JNC $+8 ;NDOS FUNCTIONS
|
||
LXI H,0FFFFH ;ILLEGAL FUNCTIONS
|
||
MOV A,H
|
||
RET
|
||
;
|
||
ADI CBMAX+1 ;ADD FUNCTION BIAS
|
||
MOV C,A
|
||
NDOSEB:
|
||
DAD B
|
||
DAD B
|
||
DAD B
|
||
DAD B ;GET INDEX POINT
|
||
MOV A,M
|
||
MOV E,A
|
||
INX H
|
||
MOV D,M ;GET ROUTINE POINTER
|
||
ORA D
|
||
JZ $+5 ;NOT ROUTINE TYPE
|
||
XCHG ;ROUTINE TYPE
|
||
PCHL ;TO EACH ROUTINE
|
||
;
|
||
INX H ;NOT ROUTINE TYPE
|
||
INX H
|
||
MOV A,M
|
||
ANI 80H
|
||
JNZ TBDOSP ;NOT NDOS MODE, TO BODS
|
||
XCHG ;BY BIT MAP PROCESS
|
||
CALL CHKDSK ;CHECK DISK & OVERRIDING GOTO BDOS, IF LOCAL
|
||
XCHG
|
||
DCX H
|
||
DCX H
|
||
MVI B,2 ;BYTE COUNT
|
||
LXI D,INBMAP ;BIT MAP INDEX TOP
|
||
NDOSBM: ;BYTE LOOP FOR SET UP
|
||
INX H
|
||
MVI C,8 ;BIT COUNT
|
||
MOV A,M
|
||
NDOSBT: ;BIT LOOP
|
||
RAR
|
||
JNC NDOSBS ;OFF BIT
|
||
PUSH H ;ON BIT
|
||
PUSH PSW
|
||
LDAX D
|
||
MOV L,A
|
||
INX D
|
||
LDAX D
|
||
MOV H,A ;GET ROUTINE POINT
|
||
DCX D
|
||
POP PSW
|
||
XTHL ;PUSH ROUTINE ADDRESS
|
||
NDOSBS:
|
||
INX D
|
||
INX D ;TO NEXT INDEX POINT
|
||
DCR C
|
||
JNZ NDOSBT ;TO NEXT BIT
|
||
DCR B
|
||
RZ ;OK ALL SET UP, TO FIRST PROCESS
|
||
PUSH H
|
||
LXI H,RCVPAR ;SET RECEIVE ROUTINE
|
||
XTHL
|
||
PUSH H
|
||
LXI H,SNDHDR ;SET SEND ROUTINE
|
||
XTHL
|
||
JMP NDOSBM ;TO PREPROCESS SET UP
|
||
;
|
||
; SEND MESSAGE WITH HEADER SET UP
|
||
;
|
||
SNDHDR:
|
||
LHLD CONTAD
|
||
XCHG
|
||
LXI H,MSGTOP
|
||
MVI M,FSEND ;FORMAT CODE TO SEND MODE
|
||
LDAX D ;GET SLAVE ID
|
||
INX H
|
||
INX H
|
||
MOV M,A ;SET SLAVE ID
|
||
INX H
|
||
MOV A,M
|
||
CPI CSRFST
|
||
JNZ SNDHDS ;NOT SEARCH FIRST
|
||
MVI A,-1
|
||
STA FLSRCH ;SET SEARCH FCB ON NETWORK MODE
|
||
XCHG
|
||
LHLD PARAMT
|
||
SHLD PNSRCH ;SAVE FCB POINT
|
||
XCHG
|
||
SNDHDS:
|
||
INX H
|
||
INX H
|
||
XCHG
|
||
LHLD MCRPNT ;GET CURRENT POINT OF MESSAGE (= END POINT)
|
||
XRA A
|
||
SUB E
|
||
MOV C,A
|
||
MVI A,0
|
||
SBB D
|
||
MOV B,A
|
||
DAD B ;GET LENGTH OF MESSAGE
|
||
MOV A,L
|
||
ORA H
|
||
JNZ $+4 ;SOME DATA
|
||
INX H ;ZERO BECOMES ONE DATA
|
||
DCX H
|
||
XCHG
|
||
DCX H
|
||
MOV M,E ;SET SIZE
|
||
LXI B,MSGTOP
|
||
JMP SDMSGE ;SEND MESSAGE
|
||
;
|
||
; RECEIVE MESSAGE WITH INITIALIZATION OF MESSAGE POINTER
|
||
;
|
||
RCVPAR:
|
||
LXI B,MSGTOP
|
||
CALL RVMSGE ;RECEIVE
|
||
LXI H,MSGDAT
|
||
SHLD MCRPNT ;INITIALIZE POINTER
|
||
RET
|
||
;
|
||
; BIT MAP FUNCTION ROUTINES
|
||
;
|
||
SUBTTL BIT MAP FUNCTION ROUTINES
|
||
;
|
||
; INDEX FOR BIT MAP FUNCTIONS OF DOS FUNCTION
|
||
;
|
||
INBMAP:
|
||
;POST PROCESS ROUTINES
|
||
DW GTRPA ;0 GET RETURN PARAMETER
|
||
DW RSRRCN ;1 RESTORE RANDOM RECODE NUMBER
|
||
DW GTDRDT ;2 GET DIRECTORY DATA
|
||
DW GTOSCT ;3 GET ONE SECTOR DATA
|
||
DW RSEXCR ;4 RESTORE EXTENT & CURRENT RECORD
|
||
DW BMNOP ;5 NO OPERATION (NOT USED)
|
||
DW BMNOP ;6 NO OPERATION (NOT USED)
|
||
DW BMNOP ;7 NO OPERATION (NOT USED)
|
||
;PRE PROCESS ROUTINES
|
||
DW BMNOP ;0 NO OPERATION (NOT USED)
|
||
DW STRRCN ;1 SET RANDOM RECODE NUMBER
|
||
DW STFLNM ;2 SET FILE NAME FOR RENAME
|
||
DW WTDTCP ;3 SET ONE SETOR DATA
|
||
DW STEXCR ;4 SET EXTENT & CURRENT RECODE
|
||
DW SETFCB ;5 SET FCB
|
||
DW STFCBP ;6 SET FCB POINT
|
||
DW TBDOSP ;7 TO BDOS (NOT USED)
|
||
;
|
||
; NO OPERATION POST 5,6,7 PRE 0 (NOT USED)
|
||
;
|
||
BMNOP:
|
||
RET
|
||
;
|
||
; POST OPERATIONS
|
||
;
|
||
; POST 1
|
||
; 35:COMPUTE FILE SIZE
|
||
; 36:SET CURRENT RECODE NUMBER
|
||
;
|
||
; RESTORE RANDOM RECORD NUMBER
|
||
;
|
||
RSRRCN:
|
||
LHLD PARAMT ;GET FCB TOP
|
||
LXI D,33 ;BIAS TO RANDOM RECODE NUMBER
|
||
DAD D
|
||
MVI B,3
|
||
JMP MCPYFS ;COPY RANDOM RECODE NUMBER
|
||
;
|
||
; POST 2
|
||
; 17:SEARCH FIRST
|
||
; 18:SEARCH NEXT
|
||
;
|
||
; GET DIRECTORY DATA
|
||
; OUTPUT
|
||
; A:DIRECTORY CODE
|
||
;
|
||
GTDRDT:
|
||
LHLD MCRPNT
|
||
XCHG
|
||
LDAX D
|
||
INX D
|
||
CPI -1
|
||
RZ ;ERROR (NOT FOUND)
|
||
LHLD DMAADD
|
||
LXI B,32
|
||
PUSH PSW ;SAVE DIRECTORY CODE
|
||
ANI 03H ;GET DIRECTORY BIAS CODE
|
||
INR A
|
||
DCR A
|
||
JZ GTDRDL ;GET BIAS
|
||
DAD B
|
||
JMP $-5 ;MAKE DATA TOP POINT
|
||
;
|
||
GTDRDL: ;COPY LOOP OF DIRECTORY DATA
|
||
LDAX D
|
||
MOV M,A
|
||
INX D
|
||
INX H
|
||
DCR C
|
||
JNZ GTDRDL
|
||
POP PSW ;RESTORE DIRECTORY CODE
|
||
RET
|
||
;
|
||
; POST 3
|
||
; 20:READ SEQUENTIAL
|
||
; 33:READ RANDOM
|
||
;
|
||
; GET ONE SECTOR DATA
|
||
;
|
||
GTOSCT:
|
||
LHLD DMAADD
|
||
MVI B,SCTLNG
|
||
JMP MCPYFS ;COPY ONE SECTOR DATA TO DMA ADDRESS
|
||
;
|
||
; POST 4
|
||
; 20:READ SEQUENTIAL
|
||
; 21:WRITE SEQUENTIAL
|
||
; 33:READ RANDOM
|
||
; 34:WRITE RANDOM
|
||
; 35:COMPUTE FILE SIZE
|
||
; 40:WRITE RANDOM WITH ZERO FILL
|
||
;
|
||
; RESTORE EXTENT & CURRENT RECORD
|
||
;
|
||
RSEXCR:
|
||
LHLD MCRPNT
|
||
XCHG
|
||
LHLD PARAMT ;FCB TOP
|
||
LXI B,12
|
||
DAD B
|
||
LDAX D
|
||
MOV M,A ;SET EXTENT
|
||
INX D
|
||
LXI B,20
|
||
DAD B
|
||
LDAX D
|
||
MOV M,A ;SET CURRENT RECODE
|
||
INX D
|
||
XCHG
|
||
SHLD MCRPNT
|
||
RET
|
||
;
|
||
; POST 0
|
||
; 15:OPEN FILE
|
||
; 16:CLOSE FILE
|
||
; 19:DELETE FILE
|
||
; 20:READ SEQUENTIAL
|
||
; 21:WRITE SEQUENTIAL
|
||
; 22:MAKE FILE
|
||
; 23:RENAME
|
||
; 30:SET ATTRIBUTE
|
||
; 33:READ RANDOM
|
||
; 34:WRITE RANDOM
|
||
; 35:COMPUTE FILE SIZE
|
||
; 36:GET CURRENT RECODE NUMBER
|
||
; 40:WRITE RANDOM WITH ZERO FILL
|
||
;
|
||
; GET RETURN PARAMETER
|
||
; OUTPUT
|
||
; HL:TWO BYTE PARAMETER
|
||
; A:ONE BYTE PARAMETER SAME WITH L
|
||
;
|
||
GTRPA:
|
||
LHLD MCRPNT
|
||
MOV E,M
|
||
INX H
|
||
MOV D,M ;GET PARAMETER
|
||
INX H
|
||
SHLD MCRPNT ;SAVE NEXT POINT
|
||
XCHG
|
||
MOV A,L ;SET FOR ONE BYTE PARAMETER
|
||
RET
|
||
;
|
||
; PRE OPERATIONS
|
||
;
|
||
; PRE 1
|
||
; 33:READ RANDOM
|
||
; 34:WRITE RANDOM
|
||
; 40:WRITE RANDOM WITH ZERO FILL
|
||
;
|
||
; SET RANDOM RECORD NUMBER
|
||
;
|
||
STRRCN:
|
||
LHLD PARAMT ;FCB TOP
|
||
LXI D,33
|
||
DAD D ;RANDOM RECODE NUMBER POINT
|
||
MVI B,3
|
||
JMP MCPYTS
|
||
;
|
||
; PRE 2
|
||
; 23:RENAME
|
||
;
|
||
; SET FILE NAME FOR RENAME
|
||
;
|
||
STFLNM:
|
||
LHLD MCRPNT
|
||
PUSH H
|
||
MVI B,32
|
||
CALL MCPYTO ;SET TWO FILE NAMES
|
||
CALL CHKDSK ;GET DISK PARAMETER POINT
|
||
DCX H
|
||
MOV A,M
|
||
ANI 0FH ;GET DISK NUMBER
|
||
INR A
|
||
POP H
|
||
MOV M,A ;SET DISK CODE
|
||
LXI D,16
|
||
DAD D
|
||
MOV M,A ;SET DISK CODE FOR SECOND NAME
|
||
RET
|
||
;
|
||
; PRE 3
|
||
; 21:WRITE SEQUENTIAL
|
||
; 34:WRITE RANDOM
|
||
; 40 WRITE RANDOM WITH ZERO FILL
|
||
;
|
||
; SET ONE SECTOR DATA COPY TO MESSAGE BUFFER
|
||
;
|
||
WTDTCP:
|
||
LHLD DMAADD
|
||
MVI B,SCTLNG
|
||
JMP MCPYTS
|
||
;
|
||
RET
|
||
;
|
||
; PRE 4
|
||
; 20:READ SEQUENTIAL
|
||
; 21:WRITE SEQUENTIAL
|
||
; 36:GET CURRENT RECODE COUNT
|
||
;
|
||
; SET EXTENT & CURRENT RECODE
|
||
;
|
||
STEXCR:
|
||
LHLD MCRPNT
|
||
XCHG
|
||
LHLD PARAMT
|
||
LXI B,12
|
||
DAD B
|
||
MOV A,M ;SET EXTENT
|
||
STAX D
|
||
INX D
|
||
LXI B,20
|
||
DAD B
|
||
MOV A,M ;SET CURRENT RECORD
|
||
STAX D
|
||
INX D
|
||
XCHG
|
||
SHLD MCRPNT
|
||
RET
|
||
;
|
||
; PRE 5
|
||
; 15:OPEN FILE
|
||
; 17:SEARCH FIRST
|
||
; 19:DELETE
|
||
; 22:MAKE FILE
|
||
; 30:SET ATTRIBUTE
|
||
;
|
||
; SET FCB
|
||
;
|
||
SETFCB:
|
||
LHLD MCRPNT
|
||
PUSH H
|
||
MVI B,13
|
||
CALL MCPYTO ;COPY FCB
|
||
CALL CHKDSK
|
||
DCX H
|
||
MOV A,M
|
||
ANI 0FH
|
||
INR A
|
||
POP H
|
||
MOV M,A ;SET DISK CODE
|
||
RET
|
||
;
|
||
; PRE 6
|
||
; 15:OPEN FILE
|
||
; 16:CLOSE FILE
|
||
; 20:READ SEQUENTIAL
|
||
; 21:WRITE SEQUENTIAL
|
||
; 22:MAKE FILE
|
||
; 33:READ RANDOM
|
||
; 34:WRITE RANDOM
|
||
; 35:COMPUTE FILE SIZE
|
||
; 36:GET CURRENT RECODE NUMBER
|
||
; 40:WRITE RANDOM WITH ZERO FILL
|
||
;
|
||
; SET FCB POINT
|
||
;
|
||
STFCBP:
|
||
LXI H,PARAMT
|
||
MVI B,2
|
||
JMP MCPYTS
|
||
;
|
||
; GENERAL SUBROUTINES
|
||
;
|
||
SUBTTL GENERAL SUBROUTINES
|
||
;
|
||
; MESSAGE COPY FROM MESSAGE BUFFER
|
||
; INPUT
|
||
; B:COUNT
|
||
;
|
||
MCPYFR: ;NOT USED HERE
|
||
LHLD PARAMT ;GET DATA POINT
|
||
MCPYFS:
|
||
XCHG
|
||
LHLD MCRPNT ;GET MESSAGE BUFFER POINT
|
||
MOV A,M ;COPY DATA
|
||
STAX D
|
||
INX D
|
||
INX H
|
||
DCR B
|
||
JNZ $-5 ;TO NEXT BYTE
|
||
SHLD MCRPNT ;SAVE NEXT POINT
|
||
RET
|
||
;
|
||
; MESSAGE COPY TO MESSAGE BUFFER
|
||
; INPUT
|
||
; B:COUNT
|
||
;
|
||
MCPYTO:
|
||
LHLD PARAMT ;GET PARAMETER POINT
|
||
MCPYTS:
|
||
XCHG
|
||
LHLD MCRPNT ;GET MESSAGE POINT
|
||
LDAX D ;COPY DATA
|
||
MOV M,A
|
||
INX D
|
||
INX H
|
||
DCR B
|
||
JNZ $-5
|
||
SHLD MCRPNT ;SAVE NEXT POINT
|
||
RET
|
||
;
|
||
; GET DISK PARAMETER POINT
|
||
; INPUT
|
||
; A:DISK NUMBER
|
||
; OUTPUT
|
||
; HL:PARAMETER POINT
|
||
;
|
||
GETDPT:
|
||
LHLD CONTAD
|
||
DCX H ;ADJUST A:DATA -2 POINT
|
||
ADD A ;GET BIAS
|
||
ADD L
|
||
MOV L,A
|
||
MOV A,H
|
||
ACI 0
|
||
MOV H,A
|
||
RET
|
||
;
|
||
; CHECK & SET UP DISK & OVERRIDING GOTO BDOS, IF LOCAL
|
||
; OUTPUT
|
||
; DE:DE
|
||
; HL:DISK PARAMETER POINT+1
|
||
;
|
||
CHKDSK:
|
||
LHLD PARAMT ;GET FCB POINT
|
||
MOV A,M ;GET ENTRY TYPE
|
||
ORA A
|
||
JNZ CHKDSS ;HAS ENTRY TYPE
|
||
LDA CURDSK
|
||
INR A ;MAKE ENTRY TYPE
|
||
CHKDSS:
|
||
CALL GETDPT ;GET DISK PARAMETER POINT
|
||
MOV A,M
|
||
RAL
|
||
JNC TBDOSS ;LOCAL, SO OVERRIDING GOTO BDOS
|
||
RAL
|
||
CHKDSL:
|
||
INX H
|
||
MOV A,M
|
||
STA MSGID ;SET MASTER ID
|
||
RC ;ALREADY SET UP DISK
|
||
DCX H
|
||
MVI A,40H
|
||
ORA M ;ON SET UP BIT
|
||
MOV M,A
|
||
PUSH H
|
||
PUSH D
|
||
MVI A,CSTUSC
|
||
STA MSGFUN ;SET FUNCTION FOR SET UP USER CODE
|
||
LDA USRCOD
|
||
STA MSGDAT
|
||
CALL SNDHDR ;SET UP USER CODE
|
||
CALL RCVPAR
|
||
LDA FUNCOD
|
||
LXI H,MSGFUN
|
||
MOV M,A ;RESTOTRE FUNCTION CODE
|
||
INX H
|
||
MVI M,0 ;CLEAR SIZE
|
||
INX H
|
||
SHLD MCRPNT ;ESTORE POINTER
|
||
POP D
|
||
POP H
|
||
STC ;SET OK FLAG
|
||
JMP CHKDSL
|
||
;
|
||
; TO BDOS WITH PARAMETER
|
||
;
|
||
TBDOSS: ;OVERRIDING TO BDOS
|
||
POP H
|
||
TBDOSP:
|
||
LHLD PARAMT ;GET PARAMETER
|
||
XCHG
|
||
LDA FUNCOD ;GET FUNCTION CODE
|
||
MOV C,A
|
||
;
|
||
; TO BDOS
|
||
;
|
||
TOBDOS:
|
||
LHLD BDOSE
|
||
PCHL
|
||
;
|
||
; SEND MESSAGE WITH ERROR PROCESS
|
||
; INPUT
|
||
; BC:MESSAGE ADDRESS
|
||
;
|
||
SDMSGE:
|
||
CALL SNDMSG ;SEND IN SNIOS
|
||
INR A
|
||
RNZ ;NOT ERROR
|
||
JMP NERROR ;ERROR
|
||
;
|
||
; RECEIVE MESSAGE WITH ERROR PROCESS
|
||
; INPUT
|
||
; BC:MESSAGE ADDRESS
|
||
;
|
||
RVMSGE:
|
||
CALL RCVMSG ;RECEIVE IN SNIOS
|
||
INR A
|
||
RNZ ;NOT ERROR
|
||
;
|
||
; ERROR END OF NDOS FUNCTION
|
||
;
|
||
NERROR:
|
||
LXI H,0FFFFH
|
||
MOV A,H
|
||
;
|
||
; END OF DOS FUNCTION
|
||
; INPUT
|
||
; HL:RETURN PARAMETER
|
||
; A:RETURN PARAMETER
|
||
;
|
||
NDEND:
|
||
XCHG
|
||
LHLD USTACK ;GET USER STACK
|
||
SPHL ;RESTORE USER STACK
|
||
XCHG
|
||
RET
|
||
;
|
||
; BDOS & NDOS FUNCTION INDEX
|
||
;
|
||
; 2B:ROUTINE POINTER 0 BY BIT MAP
|
||
; 2B:BIT MAP BIT 0-7 PRE PROCESS
|
||
; BIT 8-14 POST PROCESS
|
||
; BIT 15 H NOT BY NDOS FUNCTION
|
||
;
|
||
FNINDX:
|
||
DW NWBOOT,0 ; 0 SYSTEM RESET WARM BOOT
|
||
DW 0,NOFUNC ; 1 CONSOLE INPUT
|
||
DW 0,NOFUNC ; 2 CONSOLE OUTPUT
|
||
DW 0,NOFUNC ; 3 READER INPUT
|
||
DW 0,NOFUNC ; 4 PUNCHER OUTPUT
|
||
DW 0,NOFUNC ; 5 LISTER OUTPUT
|
||
DW 0,NOFUNC ; 6 DIRECT CONSOLE I/O
|
||
DW 0,NOFUNC ; 7 GET I/O BYTE
|
||
DW 0,NOFUNC ; 8 SET I/O BYTE
|
||
DW 0,NOFUNC ; 9 PRINT STRING
|
||
DW 0,NOFUNC ;10 READ CONSOLE BUFFER
|
||
DW 0,NOFUNC ;11 GET CONSOLE STATUS
|
||
DW GETVER,0 ;12 GET VERSION NUMBER
|
||
DW RSTDSK,0 ;13 RESET DISK
|
||
DW SELDSK,0 ;14 SELECT DISK
|
||
;
|
||
DW 0,6001H ;15 OPEN FILE
|
||
DW 0,4001H ;16 CLOSE FILE
|
||
DW 0,2004H ;17 SEARCH FIRST
|
||
DW 0,0004H ;18 SEARCH NEXT
|
||
DW 0,2001H ;19 DELETE FILE
|
||
DW 0,5019H ;20 READ SEQUENTIAL
|
||
DW 0,5811H ;21 WRITE SEQUENTIAL
|
||
DW 0,6001H ;22 MAKE FILE
|
||
DW 0,0401H ;23 RENAME
|
||
DW 0,NOFUNC ;24 GET LOGIN VECTOR
|
||
DW GETCDK,0 ;25 GET CURRENT DISK
|
||
DW SETDMA,0 ;26 SET DMA ADDRESS
|
||
DW 0,NOFUNC ;27 GET ALLOCATION VECTOR
|
||
DW SETROD,0 ;28 SET TO R/O DISK
|
||
DW 0,NOFUNC ;29 GET R/O VECTOR
|
||
DW 0,2001H ;30 SET ATTRIBUTE
|
||
DW 0,NOFUNC ;31 GET DISK PARAMETER ADDRESS
|
||
DW SETUSR,0 ;32 SET USER CODE
|
||
DW 0,4219H ;33 READ RANDOM
|
||
DW 0,4A11H ;34 WRITE RANDOM
|
||
DW 0,4013H ;35 COMPUTE FILE SIZE
|
||
DW 0,5003H ;36 GET CURRENT RECODE NUMBER
|
||
DW DSKACC,0 ;37 RESET DISK
|
||
DW DSKACC,0 ;38 ACCESS DISK
|
||
DW DSKACC,0 ;39 FREE DISK
|
||
DW 0,4A11H ;40 WRITE RANDOM WITH ZERO FILL
|
||
DW FUNERR,0 ;41 ----ERROR----
|
||
DW FUNERR,0 ;42 ----ERROR----
|
||
DW FUNERR,0 ;43 ----ERROR----
|
||
DW FUNERR,0 ;44 ----ERROR----
|
||
DW FUNERR,0 ;45 ----ERROR----
|
||
DW FUNERR,0 ;46 ----ERROR----
|
||
DW FUNERR,0 ;47 ----ERROR----
|
||
;
|
||
DW LOGIN,0 ;64 LOGIN
|
||
DW LOGOFF,0 ;65 LOGOFF
|
||
DW SENDMS,0 ;66 SEND MESSAGE
|
||
DW RECVMS,0 ;67 RECEIVE MESSAGE
|
||
DW NTWKST,0 ;68 NETWORK STATUS
|
||
DW CNFTBL,0 ;69 GET CONFIGRATION TABLE
|
||
DW FUNOVR,0 ;70 ----OVER----
|
||
DW FUNOVR,0 ;71 ----OVER----
|
||
DW FUNOVR,0 ;72 ----OVER----
|
||
DW FUNOVR,0 ;73 ----OVER----
|
||
DW FUNOVR,0 ;74 ----OVER----
|
||
;
|
||
; NDOS FUNCTION ROUTINES
|
||
;
|
||
SUBTTL NDOS FUNCTION ROUTINES
|
||
;
|
||
; WARM BOOT
|
||
;
|
||
NWBOOT:
|
||
LXI SP,LDSTAK ;LOADING STACK
|
||
LXI H,NDOS
|
||
SHLD BDOS+1 ;SET NDOS ENTRY POINT
|
||
LDA MDLIST ;GET LIST FILE MODE
|
||
ORA A
|
||
MVI C,EOF
|
||
CNZ NLIST ;CLOSE LIST FILE
|
||
LDA USRCOD ;GET CURRENT USER CODE
|
||
PUSH PSW ;SAVE CURRENT CODE
|
||
XRA A
|
||
STA PARAMT ;USER CODE TO 0
|
||
CALL SETUSR
|
||
MVI C,0
|
||
CALL NSLDSK ;DUMMY SELECT TO DISK 0
|
||
CALL CKLGIN ;CHECK LOGIN
|
||
ORA A
|
||
JNZ NWBOTE ;LOGIN FAILED
|
||
XRA A
|
||
STA CCPFCB+32 ;CLEAR CURRENT RECORD
|
||
LXI D,CCPFCB
|
||
LXI H,NDOSTP ;LOADING POINT
|
||
CALL LOAD ;LOAD CCP.SPR
|
||
ORA A
|
||
JNZ NWBOTE ;LOAD ERROR
|
||
LDA CDISK ;GET CCURRENT DISK CODE
|
||
MOV C,A
|
||
POP PSW ;RESTORE USER CODE
|
||
SPHL ;STACK TO TPA BOTTOM
|
||
PUSH H ;SET UP START POINT IN STACK
|
||
PUSH B ;SAVE DISK CODE
|
||
STA PARAMT
|
||
CALL SETUSR ;SET USER CODE
|
||
CALL NTWKBT ;WARM BOOT OF SNIOS
|
||
POP B
|
||
RET ;TO CCP
|
||
;
|
||
NWBOTE: ;CCP.SPR LOAD ERROR
|
||
MVI C,CBUFPR
|
||
LXI D,CLDERR
|
||
CALL BDOS ;LOAD ERROR
|
||
JMP $ ;STOP HERE
|
||
;
|
||
; ERROR COMMENT
|
||
;
|
||
CLDERR:
|
||
DB 'Failed to load the CP/Net CCP$'
|
||
;
|
||
; CHECK HOME DISK & IF NET DISK LOGIN
|
||
;
|
||
CKLGIN:
|
||
LHLD CONTAD
|
||
INX H
|
||
MOV A,M ;GET HOME DISK MODE
|
||
ORA A
|
||
MVI A,0
|
||
RP ;LOCAL DISK
|
||
INX H
|
||
MOV A,M ;GET MASTER ID OF HOME DISK
|
||
LXI D,PASSWD ;DEFAULT PASS WORD DATA
|
||
STAX D ;SET MASTER ID
|
||
MVI C,CLOGIN
|
||
JMP NDOSE ;LOGIN
|
||
;
|
||
; DEFAULT LOGIN CODE FOR HOME DISK LOGIN
|
||
;
|
||
PASSWD: DB 0,'PASSWORD'
|
||
;
|
||
; RESET DISK
|
||
;
|
||
RSTDSK:
|
||
LHLD CONTAD
|
||
INX H
|
||
MOV A,M ;GET HOME DISK MODE
|
||
ORA A
|
||
JP TBDOSP ;LOCAL DISK
|
||
LDA VERSION ;HOME DISK IS NETWORK DISK
|
||
CPI 20H
|
||
JC TBDOSP ;LOWER VERSION SYSTEM SO TO RESET
|
||
LXI H,-1 ;TO RESET DISK BY VECTOR
|
||
SHLD PARAMT
|
||
MVI A,CRSDSN
|
||
STA FUNCOD
|
||
JMP TBDOSP ;ONLY RESET DISK, NOT LOGIN DISK
|
||
;
|
||
; GET VERSION NUMBER
|
||
; OUTPUT
|
||
; HL:VERSION NUMBER
|
||
;
|
||
GETVER:
|
||
LHLD VERSION ;GET ORIGINAL VERSION NUMBER
|
||
MVI A,02H
|
||
ORA H ;TO CP/NET VERSION
|
||
MOV H,A
|
||
MOV A,L
|
||
RET
|
||
;
|
||
; SELECT DISK
|
||
;
|
||
SELDSK:
|
||
LDA PARAMT
|
||
STA CURDSK ;SAVE NEW DISK
|
||
;
|
||
; SET R/O DISK
|
||
;
|
||
SETROD:
|
||
LDA PARAMT
|
||
INR A
|
||
CALL CHKDSS ;CHECK DISK & TO BDOS IF LOCAL
|
||
DCX H
|
||
MOV A,M ;GET MASTER DISK
|
||
ANI 00FH
|
||
STA MSGDAT ;SET DISK
|
||
CALL SNDHDR ;SEND
|
||
CALL RCVPAR ;RECEIVE
|
||
JMP GTRPA ;GET RETURN PARAMETER
|
||
;
|
||
; GET CURRENT DISK
|
||
; OUTPUT
|
||
; A:CURRENT DISK
|
||
;
|
||
GETCDK:
|
||
LDA CURDSK
|
||
RET
|
||
;
|
||
; SET DMA ADDRESS
|
||
;
|
||
SETDMA:
|
||
LHLD PARAMT
|
||
SHLD DMAADD
|
||
JMP TBDOSP ;TO BDOS, ALSO SET UP IN BDOS
|
||
;
|
||
; GET OR SET USER CODE
|
||
;
|
||
SETUSR:
|
||
LDA PARAMT
|
||
CPI -1
|
||
MOV B,A
|
||
LDA USRCOD
|
||
RZ ;INTEROGATE MODE
|
||
CMP B
|
||
RZ ;SAME CODE
|
||
MOV A,B
|
||
ANI 0FH
|
||
STA USRCOD ;SAVE NEW CODE
|
||
LHLD CONTAD
|
||
MVI C,16 ;DISK COUNT
|
||
INX H
|
||
MOV A,M
|
||
ANI 0BFH ;RESET USER CODE SET UP MODE OF EACH DISK
|
||
MOV M,A
|
||
INX H
|
||
DCR C
|
||
JNZ $-7
|
||
LHLD PARAMT
|
||
XCHG
|
||
SETUSS:
|
||
LDA VERSION
|
||
CPI 20H ;CHECK VERSION
|
||
RC ;TOO LOWER VERSION
|
||
MVI C,CSTUSC
|
||
JMP TOBDOS ;SET USER CODE
|
||
;
|
||
; SET UP DISK ACCESS MODE
|
||
; RESET DISK, ACCESS DISK & FREE DISK
|
||
;
|
||
DSKACC:
|
||
LHLD CONTAD
|
||
LXI D,31
|
||
DAD D ;GET DISK DATA BOTTOM
|
||
XCHG
|
||
LXI H,0
|
||
MVI C,16
|
||
DSKACM: ;MAKE NETWORK DISK VECTOR
|
||
DAD H
|
||
LDAX D
|
||
DCX D
|
||
DCX D
|
||
RAL
|
||
JNC $+4 ;LOACL DISK
|
||
INX H ;NETWORK DISK SET VECTOR BIT
|
||
DCR C
|
||
JNZ DSKACM ;TO NEXT CHANEL
|
||
XCHG
|
||
LHLD PARAMT
|
||
MOV A,E
|
||
ANA L
|
||
MOV L,A
|
||
MOV A,D
|
||
ANA H
|
||
MOV H,A ;GET DISK VECTOR ON NETWORK
|
||
ORA L
|
||
JNZ DSKANT ;SOME DISK ON NETWORK
|
||
DSKACL: ;MAKE PROCESS FOR LOCAL DISK
|
||
MOV A,E
|
||
CMA
|
||
MOV E,A
|
||
MOV A,D
|
||
CMA
|
||
LHLD PARAMT
|
||
ANA H
|
||
MOV H,A
|
||
MOV A,L
|
||
ANA E
|
||
MOV L,A ;OFF BIT OF NETWORK DISK
|
||
SHLD PARAMT
|
||
LDA VERSION
|
||
CPI 20H
|
||
JNC TBDOSP ;TO BDOS
|
||
LDA FUNCOD ;TOO LOWER VERSION
|
||
CPI CRSDSN ;CHECK DISK RESET
|
||
MVI C,CRSDSK ;RESET ALL DISK CODE
|
||
JZ TOBDOS ;TO RESET ALL DISK
|
||
RET ;NO PROCESS
|
||
;
|
||
DSKANT: ;RESET WITH NETWORK DISK
|
||
PUSH H
|
||
CALL DSKACL ;RESET LOCAL DISK
|
||
MVI C,16
|
||
LHLD CONTAD
|
||
LXI D,31
|
||
DAD D ;GET BOTTOM OF DISK PARAMETER
|
||
POP D
|
||
XCHG
|
||
DSKANL: ;NETWORK DISK RESET LOOP
|
||
DAD H
|
||
JNC DSKANS ;NOT RESET DISK
|
||
PUSH B
|
||
PUSH D
|
||
PUSH H
|
||
XCHG
|
||
MOV A,M
|
||
ANI 0FH ;GET DISK IN MASTER
|
||
MOV C,A
|
||
INR C
|
||
INX H
|
||
MOV A,M ;GET MASTER ID
|
||
LXI H,1
|
||
DCR C
|
||
JZ $+7 ;GET BIT POINT OF DISK
|
||
DAD H
|
||
JMP $-5 ;UP BIT POINT
|
||
;
|
||
XCHG
|
||
LXI H,MSGID ;SET MASTER ID
|
||
MOV M,A
|
||
INX H
|
||
INX H
|
||
LDA FUNCOD
|
||
MOV M,A ;SET FUNCTION
|
||
LXI H,MSGDAT
|
||
MOV M,E
|
||
INX H
|
||
MOV M,D ;SET DISK VECTOR
|
||
INX H
|
||
SHLD MCRPNT
|
||
CALL SNDHDR ;SEND
|
||
CALL RCVPAR ;RECEIVE
|
||
CALL GTRPA ;GET RETURN PARAMETER
|
||
POP H
|
||
POP D
|
||
POP B
|
||
CPI -1
|
||
RZ ;ERROR
|
||
DSKANS:
|
||
DCX D
|
||
DCX D
|
||
DCR C
|
||
JNZ DSKANL ;TO NEXT DISK
|
||
XRA A ;SUCCESS END
|
||
RET
|
||
;
|
||
; ERROR OF FUNCTION CODE
|
||
;
|
||
FUNERR:
|
||
LXI H,0FFFFH
|
||
MOV A,H
|
||
RET
|
||
;
|
||
; LOGIN
|
||
;
|
||
LOGIN:
|
||
LHLD PARAMT
|
||
PUSH H
|
||
INX H ;GET PASSWORD POINT
|
||
MVI B,8 ;PASSWORD LENGTH
|
||
CALL MCPYTS ;SET PASSWORD
|
||
POP H
|
||
MOV A,M ;GET MASTER ID
|
||
MVI B,CLOGIN ;FUNCTION CODE
|
||
JMP LOGCOM
|
||
;
|
||
; LOGOFF
|
||
;
|
||
LOGOFF:
|
||
MVI B,CLOGOF ;FUNCTION CODE
|
||
LDA PARAMT ;MASTER ID
|
||
LOGCOM: ;LOGIN LOGOFF COMMON
|
||
LXI H,MSGID
|
||
MOV M,A ;SET MASTER ID
|
||
INX H
|
||
INX H
|
||
MOV M,B ;GET FUNCTION
|
||
CALL SNDHDR
|
||
CALL RCVPAR
|
||
JMP GTRPA
|
||
;
|
||
; SEND MESSAGE FOR NDOS FUNCTION
|
||
;
|
||
SENDMS:
|
||
LHLD PARAMT
|
||
MOV B,H
|
||
MOV C,L ;GET MESSAGE BUFFER POINT
|
||
JMP SNDMSG
|
||
;
|
||
; RECEIVE MESSAGE FOR NDOS FUNCTION
|
||
;
|
||
RECVMS:
|
||
LHLD PARAMT
|
||
MOV B,H
|
||
MOV C,L ;GET MESSAGE BUFFER POINT
|
||
JMP RCVMSG
|
||
;
|
||
; FUNCTION CODE ERROR TOO LARGE CODE
|
||
;
|
||
FUNOVR:
|
||
LXI H,0FFFFH
|
||
MOV A,H
|
||
RET
|
||
;
|
||
; BIOS TRAP ROUTINES
|
||
;
|
||
SUBTTL BIOS TRAP ROUTINES
|
||
;
|
||
; CONSOLE STATUS
|
||
;
|
||
NCONST:
|
||
LHLD BCONST
|
||
LXI D,CCONST ;CONSOLE STATUS FUNCTION CODE
|
||
JMP NCONCM
|
||
;
|
||
; CONSOLE INPUT
|
||
;
|
||
NCONIN:
|
||
LHLD BCONIN
|
||
LXI D,CCNDIN ;CONSOLE INPUT WITH DEVICE CODE
|
||
JMP NCONCM
|
||
;
|
||
; CONSOLE OUTPUT
|
||
; INPUT
|
||
; C:DATA
|
||
;
|
||
NCONOT:
|
||
LHLD BCONOT
|
||
LXI D,100H+CCNDOT ;COUNT & CODE
|
||
;
|
||
; CONSOLE I/O COMMON ROUTINE
|
||
; INPUT
|
||
; HL:BIOS ROUTINE ADDRESS
|
||
; E:FUNCTION CODE OF NETWORK
|
||
; D:SIZE
|
||
;
|
||
NCONCM:
|
||
PUSH H
|
||
PUSH B
|
||
LHLD CONTAD
|
||
LXI B,BSCONS
|
||
DAD B
|
||
POP B
|
||
MOV A,M ;GET CONSOLE MODE
|
||
RAL
|
||
RNC ;LOCAL SO TO BIOS ROUTINE
|
||
MOV A,M
|
||
ANI 00FH ;GET CONSOLE NUMBER
|
||
MOV B,A ;SAVE CONSOLE NUMBER
|
||
INX H
|
||
MOV A,M ;GET MASTER ID
|
||
LXI H,MSGTOP
|
||
MVI M,FSEND ;FORMAT CODE TO SEND
|
||
INX H
|
||
MOV M,A ;DESTINATION ID
|
||
XTHL
|
||
LHLD CONTAD
|
||
MOV A,M ;GET SLAVE ID
|
||
POP H
|
||
INX H
|
||
MOV M,A
|
||
INX H
|
||
MOV M,E ;SET FUNCTION
|
||
INX H
|
||
MOV M,D ;SET SIZE
|
||
INX H
|
||
MOV M,B ;SET MASTER CONSOLE NUMBER
|
||
INX H
|
||
MOV M,C ;SET DATA
|
||
LXI B,MSGTOP
|
||
CALL SDMSGE ;SEND
|
||
LXI B,MSGTOP
|
||
CALL RVMSGE ;RECEIVE
|
||
LDA MSGDAT ;GET RETUNR PARAMETER
|
||
RET
|
||
;
|
||
; LIST OUT
|
||
;
|
||
NLIST:
|
||
LHLD CONTAD
|
||
LXI D,BSLIST
|
||
DAD D
|
||
MOV A,M ;GET LISTER MODE
|
||
RAL
|
||
JC $+7 ;NETWORK
|
||
LHLD BLIST ;LOCAL
|
||
PCHL
|
||
;
|
||
MOV A,M ;ON NETWORK
|
||
ANI 00FH
|
||
STA LSTUNT ;SAVE UNIT CODE
|
||
MVI A,-1
|
||
STA MDLIST ;SET LIST OUT MODE
|
||
MOV A,C
|
||
CPI EOF
|
||
JNZ NLISTS ;NOT EOF
|
||
MVI C,FF ;EOF SO SEND LIST SEPARATOR
|
||
PUSH H
|
||
CALL NLISTS
|
||
POP H
|
||
XRA A
|
||
STA MDLIST ;CLEAR LIST OUT MODE
|
||
MVI C,EOF
|
||
NLISTS:
|
||
PUSH B
|
||
MOV B,C
|
||
INX H
|
||
INX H
|
||
MOV C,M ;GET COUNT
|
||
INR M ;COUNT UP
|
||
MVI A,SCTLNG ;ONE SECTOR LENGTH
|
||
CMP M
|
||
JZ $+9 ;SECTOR BOUNDARY
|
||
MOV A,B
|
||
CPI EOF
|
||
JNZ $+5 ;NOT END OF FILE
|
||
MVI M,0 ;CLEAR COUNT FOR SEND
|
||
LXI D,7
|
||
DAD D
|
||
MVI B,0
|
||
DAD B
|
||
POP D
|
||
MOV M,E ;SET DATA
|
||
RNZ ;NOT TRANSFER MODE
|
||
LHLD CONTAD ;TRANSFER ONE BLOCK
|
||
LXI D,BSLIST+1
|
||
DAD D
|
||
MOV A,M ;GET MASTER ID
|
||
INX H
|
||
INX H
|
||
MOV E,C
|
||
MOV B,H
|
||
MOV C,L
|
||
INX H
|
||
MOV M,A ;SET MASTER ID
|
||
INX H
|
||
INX H
|
||
INX H
|
||
INR E
|
||
MOV M,E ;SET SIZE
|
||
INX H
|
||
LDA LSTUNT
|
||
MOV M,A ;SET UNIT CODE
|
||
CALL SDMSGE ;SEND
|
||
LXI B,MSGTOP
|
||
JMP RVMSGE ;RECEIVE
|
||
;
|
||
; LIST STATUS
|
||
;
|
||
NLSTST:
|
||
LHLD CONTAD
|
||
LXI D,BSLIST
|
||
DAD D
|
||
MOV A,M
|
||
RAL
|
||
RC ;ON NETWORK
|
||
LHLD BLSTST ;LOCAL
|
||
PCHL
|
||
;
|
||
; SELECT DISK
|
||
;
|
||
NSLDSK:
|
||
LHLD BSLDSK
|
||
PCHL
|
||
;
|
||
; LOADING ROUTINES
|
||
;
|
||
SUBTTL PROGRAM LOADING ROUTINES
|
||
;
|
||
; LOAD ONE FILE
|
||
; INPUT
|
||
; HL:BOTTOM OF FREE AREA
|
||
; DE:FCB
|
||
; OUTPUT
|
||
; A:-1 ERROR
|
||
; HL:TOP OF PROGRAM
|
||
;
|
||
LOAD:
|
||
SHLD LDBOTM ;SAVE BOTTOM
|
||
XCHG
|
||
SHLD LDFCB ;SAVE FCB POINT
|
||
MVI C,CSTDMA
|
||
LXI H,-SCTLNG ;SUBTRUCT ONE SECTOR LENGTH
|
||
DAD D
|
||
SHLD LDDMA ;SAVE DMA POINT FOR PARAMETER READ
|
||
XCHG
|
||
CALL NDOSE ;SET DMA ADDRESS TO SCRATCH AREA
|
||
LHLD LDFCB
|
||
XCHG
|
||
MVI C,COPEN
|
||
CALL NDOSE ;OPEN FILE
|
||
CPI -1
|
||
RZ ;OPEN ERROR (NOT FOUND)
|
||
CALL OSREAD ;GET PARAMETER SECTOR
|
||
LHLD LDDMA
|
||
INX H
|
||
MOV E,M
|
||
INX H
|
||
MOV D,M ;GET CODE AREA LENGTH
|
||
INX H
|
||
INX H
|
||
MOV C,M
|
||
INX H
|
||
MOV B,M ;GET DATA AREA LENGTH
|
||
XCHG
|
||
SHLD LDLNGT ;SAVE CODE AREA LENGTH
|
||
DAD B ;GET TOTAL LENGTH
|
||
XCHG
|
||
LHLD LDBOTM ;GET BOTTOM
|
||
XCHG
|
||
XRA A
|
||
SUB L
|
||
MOV L,A
|
||
MVI A,0
|
||
SBB H
|
||
MOV H,A
|
||
DAD D ;SUBTRUCT LENGTH FROM BOTTOM POINT
|
||
MVI L,000H ;GET LOADING TOP
|
||
SHLD LDTOP ;SAVE LOADING TOP (PROGRAM TOP)
|
||
XCHG
|
||
LXI H,-SCTLNG
|
||
DAD D ;SUBTRUCT ONE SECTOR LENGTH
|
||
SHLD LDDMA ;SET RELOCATION DATA BUFFER TOP
|
||
CALL OSREAD ;GET DATA & IGNORE
|
||
LHLD LDLNGT
|
||
LXI D,SCTLNG-1
|
||
DAD D ;ADJUST BOUNDARY
|
||
MOV A,L
|
||
RAL
|
||
MOV A,H
|
||
RAL ;GET SECTOR COUNT OF CODE AREA
|
||
LHLD LDTOP ;GET LOADING TOP
|
||
LOADLP: ;ONE SECTOR LOADING LOOP
|
||
STA LDCNT ;SAVE COUNT
|
||
SHLD LDPNT ;SAVE LOADING POINT
|
||
XCHG
|
||
MVI C,CSTDMA
|
||
CALL NDOSE ;SET DMA ADDRESS
|
||
CALL OSREAD ;READ ONE SECTOR DATA
|
||
LHLD LDPNT
|
||
LXI D,SCTLNG ;ONE SECTOR LENGTH
|
||
DAD D ;GET NEXT DMA ADDRESS
|
||
LDA LDCNT
|
||
DCR A ;SECTOR COUNT DOWN
|
||
JNZ LOADLP ;TO NEXT SECTOR
|
||
LHLD LDDMA ;GET BUFFER POINT FOR RELOCATION DATA
|
||
XCHG
|
||
MVI C,CSTDMA
|
||
CALL NDOSE ;SET TO RELOCATION BUFFER POINT
|
||
LHLD LDLNGT ;GET LENGTH TO GET RELOCATION DATA TOP
|
||
MOV B,H
|
||
MOV C,L
|
||
XCHG
|
||
LHLD LDTOP ;CODE TOP
|
||
XCHG
|
||
DAD D ;GET TOP OF RELOCATION DATA
|
||
PUSH H ;SAVE RELOCATION DATA POINT
|
||
MOV H,D ;SET RELOCATION BIAS
|
||
LOADRL: ;RELOCATION LOOP
|
||
MOV A,B
|
||
ORA C
|
||
JNZ $+8 ;NOT TO END
|
||
POP H ;END OF RELOCATION
|
||
LHLD LDTOP ;TOP OF PROGRAM
|
||
RET ;END OF LOADING
|
||
;
|
||
DCX B
|
||
MOV A,E
|
||
ANI 07H
|
||
JNZ LOADRB ;NOT BYTE BOUNDARY
|
||
XTHL ;BYTE BOUNDARY, GET DATA POINT
|
||
MOV A,L
|
||
ANI 07FH
|
||
JNZ LOADRS ;NOT SECTOR BOUNDARY
|
||
PUSH B
|
||
PUSH D
|
||
PUSH H
|
||
LHLD LDFCB ;GET FCB POINT
|
||
XCHG
|
||
MVI C,CREAD
|
||
CALL NDOSE ;GET ONE SECTOR DATA
|
||
POP H
|
||
POP D
|
||
POP B
|
||
LHLD LDDMA ;GET DATA TOP POINT
|
||
ORA A
|
||
JNZ OSRDER ;NO DATA, SO ERROR
|
||
LOADRS:
|
||
MOV A,M ;GET NEXT RELOCATION DATA
|
||
INX H
|
||
XTHL
|
||
MOV L,A
|
||
LOADRB:
|
||
MOV A,L
|
||
RAL ;GET ONE BIT DATA
|
||
MOV L,A
|
||
JNC $+6 ;NOT RELOCATE
|
||
LDAX D ;RELOCATE
|
||
ADD H
|
||
STAX D
|
||
INX D
|
||
JMP LOADRL ;TO NEXT DATA
|
||
;
|
||
; READ ONE SECTOR DATA
|
||
;
|
||
OSREAD:
|
||
LHLD LDFCB ;GET FCB
|
||
XCHG
|
||
MVI C,CREAD
|
||
CALL NDOSE ;READ ONE SECTOR
|
||
ORA A
|
||
RZ ;NOT ERROR
|
||
OSRDER: ;NO DATA, SO ERROR
|
||
MVI A,-1
|
||
POP H ;OVERRIDING RETURN
|
||
RET
|
||
;
|
||
; LOADING ROUTINE WORKING
|
||
;
|
||
LDDMA: DS 2 ;DMA ADDRESS
|
||
LDLNGT: DS 2 ;CODE AREA LENGTH
|
||
LDFCB: DS 2 ;FCB POINTER
|
||
LDBOTM: DS 2 ;BOTTOM POINT OF FREE AREA
|
||
LDTOP: DS 2 ;TOP POINT OF PROGRAM
|
||
LDCNT: DS 1 ;LOAD SECTOR COUNT
|
||
LDPNT: DS 2 ;LOADING POINTER
|
||
;
|
||
;
|
||
DS 64
|
||
LDSTAK: ;BOOT LOADING STACK
|
||
;
|
||
;
|
||
ORG (($-NDOSTP+255) AND 0FF00H)-1
|
||
DB 0 ;NDOS BOTTOM
|
||
;
|
||
; SNIOS ROUTINES
|
||
;
|
||
NTWKIN EQU $ ;NETWORK INITIALIZE
|
||
NTWKST EQU $+3 ;NETWORK STATUS
|
||
CNFTBL EQU $+6 ;GET CONFIGRATION TABLE ADDRESS
|
||
SNDMSG EQU $+9 ;SEND MESSAGE
|
||
RCVMSG EQU $+12 ;RECEIVE MESSAGE
|
||
NTWKER EQU $+15 ;NETWORK ERROR
|
||
NTWKBT EQU $+18 ;NETWORL WARM BOOT
|
||
;
|
||
;
|
||
END
|
||
|