mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 17:04:19 +00:00
Upload
Digital Research
This commit is contained in:
1438
CP-NET/CPNET-86 SOURCE/CCPN.A86
Normal file
1438
CP-NET/CPNET-86 SOURCE/CCPN.A86
Normal file
File diff suppressed because it is too large
Load Diff
436
CP-NET/CPNET-86 SOURCE/CPNETLDR.A86
Normal file
436
CP-NET/CPNET-86 SOURCE/CPNETLDR.A86
Normal file
@@ -0,0 +1,436 @@
|
||||
; CP/NET-86 LOADER
|
||||
;
|
||||
; 1983.8.31. VER.1.00
|
||||
;
|
||||
; EQUATIONS OF DATA
|
||||
;
|
||||
LF EQU 0AH ;LINE FEED
|
||||
CR EQU 0DH ;CARRIAGE RETURN
|
||||
;
|
||||
BDOS EQU 224 ;BODS INTERRUPT NUMBER
|
||||
SCTLNG EQU 128 ;SECTOR LENGTH
|
||||
;
|
||||
VBDOS EQU BDOS*4 ;VECTOR OF BDOS INTERRUPT
|
||||
BSBIOS EQU 250H ;BIAS TO BIOS
|
||||
MINSIZ EQU 800H ;MINIMUM REQUIRED SPACE
|
||||
MAXCPM EQU 0C00H ;MAXIMUM CP/M SIZE
|
||||
;
|
||||
; EQUATIONS OF BDOS FUNCTION
|
||||
;
|
||||
CRESET EQU 0 ;SYSTEM RESET
|
||||
CCONOT EQU 2 ;CONSOLE OUT
|
||||
CBUFPR EQU 9 ;BUFFERED STRING PRINT
|
||||
CGETVR EQU 12 ;GET VERSION NUMBER
|
||||
COPEN EQU 15 ;OPEN FILE
|
||||
CREAD EQU 20 ;READ FILE
|
||||
CSTDMA EQU 26 ;SET DMA OFFSET
|
||||
CDBIOS EQU 50 ;DIRECT BIOS CALL
|
||||
CSTDMS EQU 51 ;SET DMA SEGMENT
|
||||
CGTMXM EQU 53 ;GET MAXIMUM MEMORY
|
||||
;
|
||||
;
|
||||
ORG 100H
|
||||
;
|
||||
JMP START
|
||||
;
|
||||
;
|
||||
DB 'COPYRIGHT (C) 1983,'
|
||||
DB ' XYZ (DIGITAL RESEARCH)'
|
||||
;
|
||||
;
|
||||
START:
|
||||
MOV AX,CS
|
||||
MOV SS,AX
|
||||
MOV SP,OFFSET STACK ;SET STACK
|
||||
XOR DX,DX
|
||||
MOV CL,CGETVR
|
||||
INT BDOS ;GET VERSION NUMBER
|
||||
MOV CX,OFFSET CARLOD
|
||||
AND AX,200H
|
||||
JNZ ERROR ;ALREADY LOADED
|
||||
CALL GETMRG ;GET LOADING MEMORY REGION
|
||||
MOV CX,OFFSET CSTUP
|
||||
CALL BUFPRN ;OUT TABLE TOP
|
||||
XOR DX,DX
|
||||
MOV CX,OFFSET CCCP
|
||||
CALL DSPLIN ;OUT CCP LOCATION
|
||||
XOR DX,DX
|
||||
MOV ES,DX
|
||||
MOV DX,ES:WORD PTR .VBDOS ;GET OFFSET OF BDOS
|
||||
MOV CL,4
|
||||
SHR DX,CL ;GET BDOS BIAS
|
||||
MOV CX,OFFSET CBDOS
|
||||
CALL DSPLIN ;OUT BDOS LOCATION
|
||||
MOV DX,BSBIOS ;BIOS TOP
|
||||
MOV CX,OFFSET CBIOS
|
||||
CALL DSPLIN ;OUT BIOS LOCATION
|
||||
MOV DX,LODOFF
|
||||
MOV CX,OFFSET CCCPN
|
||||
CALL LOAD ;LOAD CCPN
|
||||
MOV NDOSOF,DX ;SAVE NDOS TOP
|
||||
MOV CX,OFFSET CNDOS
|
||||
CALL LOAD ;LOAD NDOS
|
||||
MOV CX,OFFSET CSNIOS
|
||||
CALL LOAD ;LOAD SNIOS
|
||||
MOV CX,OFFSET CTPA
|
||||
CALL DSPLIN ;TPA LOCATION
|
||||
MOV CX,OFFSET CLEND
|
||||
CALL BUFPRN ;OUT LOADING END COMMENT
|
||||
MOV AX,NDOSOF
|
||||
MOV CL,4
|
||||
SHL AX,CL
|
||||
ADD AX,3
|
||||
MOV NDOSEN,AX ;SET NDOS COLD START ENTRY OFFSET
|
||||
JMPF DWORD PTR NDOSEN ;TO NDOS
|
||||
;
|
||||
; ERROR END
|
||||
; INPUT
|
||||
; CX:COMMENT POINT
|
||||
;
|
||||
ERROR: ;ERROR END
|
||||
CALL BUFPRN ;OUT ERROR COMMENT
|
||||
MOV CL,CRESET
|
||||
INT BDOS ;RETURN TO SYSTEM
|
||||
;
|
||||
; GET MEMORY REGION FOR CP/NET SYSTEM
|
||||
;
|
||||
GETMRG:
|
||||
MOV DX,OFFSET WKMCB
|
||||
MOV CL,CGTMXM
|
||||
INT BDOS ;GET MAXIMUM MEMORY
|
||||
MOV CX,OFFSET CNOAVL
|
||||
OR AL,AL
|
||||
JNZ ERROR ;NO AVAILABLE MEMORY
|
||||
MOV CL,CDBIOS
|
||||
MOV DX,OFFSET WKBIOS
|
||||
INT BDOS ;GET MEMORY REGION TABLE
|
||||
INC BX
|
||||
MOV DX,ES:[BX] ;GET TOP REGION
|
||||
MOV CX,OFFSET CNOAVL
|
||||
CMP DX,WKMCB
|
||||
JNZ ERROR ;NOT TOP NEED TOP REGION FOR CP/NET
|
||||
MOV AX,WKMCB+2
|
||||
CMP AX,MINSIZ
|
||||
JC ERROR ;TOO SMALL
|
||||
XOR AX,AX
|
||||
MOV ES,AX ;INTERRUPT VECTOR PAGE
|
||||
MOV DX,ES:WORD PTR .VBDOS+2 ;GET DOS SEGMENT
|
||||
MOV DOSSGM,DX ;SAVE SEGMENT
|
||||
MOV AX,WKMCB ;GET AVAILABLE TOP
|
||||
SUB AX,DX
|
||||
ADD AX,15
|
||||
AND AX,0FFF0H ;TO PAGE BOUNDARY
|
||||
CMP AX,MAXCPM
|
||||
JNC ERROR ;CP/M BASIC LENGTH TOO LONG
|
||||
MOV LODOFF,AX ;SAVE OFFSET
|
||||
RET
|
||||
;
|
||||
; ERROR OF LOADING
|
||||
;
|
||||
ERLOAD:
|
||||
MOV CX,OFFSET CLERR
|
||||
JMP ERROR
|
||||
;
|
||||
; LOAD ONE PROGRAM
|
||||
; INPUT
|
||||
; DX:LOADING TOP PARAGRAPH
|
||||
; CX:FILE NAME POINTER
|
||||
; OUTPUT
|
||||
; DX:NEXT PARAGRAPH
|
||||
;
|
||||
LOAD:
|
||||
PUSH DX
|
||||
PUSH CX
|
||||
CALL CRLF
|
||||
POP CX
|
||||
PUSH CX
|
||||
CALL BUFPRN ;OUT FILE NAME
|
||||
MOV AX,DS
|
||||
MOV ES,AX
|
||||
POP SI
|
||||
MOV DI,OFFSET WKFCB
|
||||
CLD
|
||||
XOR AX,AX
|
||||
STOSB ;CLEAR ENTRY TYPE
|
||||
MOV CX,11
|
||||
REP MOVSB ;SET FILE NAME TO FCB
|
||||
MOV CL,21
|
||||
REP STOSB ;CLEAR LEFT AREA
|
||||
MOV DX,OFFSET WKFCB
|
||||
MOV CL,COPEN
|
||||
INT BDOS ;OPEN FILE
|
||||
INC AL
|
||||
JZ ERLOAD ;FILE NOT FOUND
|
||||
MOV DX,CS
|
||||
MOV CL,CSTDMS
|
||||
INT BDOS ;SET DMA SEGMENT
|
||||
MOV DX,OFFSET RDWORK
|
||||
MOV CL,CSTDMA
|
||||
INT BDOS ;SET DMA OFFSET TO READ WORK
|
||||
CALL READ ;READ ONE SECTOR
|
||||
MOV BX,OFFSET RDWORK+1
|
||||
MOV DX,[BX] ;GET CODE LENGTH
|
||||
MOV AX,3[BX] ;GET DATA LENGTH
|
||||
ADD AX,DX ;GET TOTAL LENGTH
|
||||
MOV CODLNG,DX ;SAVE CODE LENGTH
|
||||
MOV CL,4
|
||||
ADD AX,15
|
||||
SHR AX,CL ;GET BY PARAHRAPH
|
||||
POP BX ;GET CURRENT TOP
|
||||
MOV TOPPGH,BX ;SAVE TOP
|
||||
ADD AX,BX
|
||||
ADD AX,15
|
||||
AND AX,0FFF0H ;GET NEXT PAGE TOP
|
||||
MOV NXTPGH,AX ;SAVE NEXT PARAGRAPH
|
||||
MOV CL,4
|
||||
SHL BX,CL
|
||||
MOV LODTOP,BX
|
||||
ADD DX,127
|
||||
MOV CL,7
|
||||
SHR DX,CL ;GET SECTOR COUNT
|
||||
MOV DI,BX ;SET DESTINATION POINTER
|
||||
PUSH DX
|
||||
PUSH DI
|
||||
CALL READ ;DUMMY PASS READ
|
||||
POP DI
|
||||
POP DX
|
||||
LOADLP: ;ONE SECTOR LOAD LOOP
|
||||
PUSH DX
|
||||
PUSH DI
|
||||
CALL READ ;REDA ONE SECTOR
|
||||
POP DI
|
||||
MOV SI,OFFSET RDWORK
|
||||
MOV ES,DOSSGM ;DESTINATION SEGMENT
|
||||
MOV CX,SCTLNG
|
||||
CLD
|
||||
REP MOVSB ;TO DESTINATION AREA
|
||||
POP DX
|
||||
DEC DX
|
||||
JNZ LOADLP ;TO NEXT SECTOR
|
||||
MOV DX,CODLNG ;GET CODE LENGTH
|
||||
MOV AX,DX
|
||||
AND AX,7FH ;GET OFFSET IN SECTOR
|
||||
MOV SI,OFFSET RDWORK
|
||||
ADD SI,AX ;GET DATA POINT
|
||||
MOV BX,LODTOP ;LOADED DATA TOP
|
||||
MOV CL,3
|
||||
SHL AX,CL
|
||||
MOV CX,AX ;GET RELOCATION COUNT
|
||||
MOV AH,BH ;GET RELOCATION BIAS
|
||||
LOADRL: ;RELOCATION LOOP
|
||||
TEST CL,7
|
||||
JNZ LOADRB ;NOT BYTE BOUNDARY
|
||||
TEST CX,3FFH
|
||||
JNZ LOADRS ;NOT SECTOR BOUNDARY
|
||||
PUSH AX ;TO NEXT SECTOR
|
||||
PUSH BX
|
||||
PUSH DX
|
||||
PUSH ES
|
||||
CALL READ ;READ TO WORK
|
||||
POP ES
|
||||
POP DX
|
||||
POP BX
|
||||
POP AX
|
||||
XOR CX,CX ;CLEAR COUNT
|
||||
MOV SI,OFFSET RDWORK ;WORK TOP
|
||||
CLD
|
||||
LOADRS:
|
||||
LODSB ;GET ONE BYTE RELOCATION DATA
|
||||
LOADRB:
|
||||
INC CX
|
||||
ROL AL,1
|
||||
JNC LOADRA ;ABSOLUTE
|
||||
ADD ES:[BX],AH ;RELOCATE
|
||||
LOADRA:
|
||||
INC BX ;POINTER TO NEXT
|
||||
DEC DX ;DOWN LENGTH COUNT
|
||||
JNZ LOADRL ;TO NEXT DATA
|
||||
MOV AX,TOPPGH
|
||||
PUSH AX
|
||||
MOV CL,4
|
||||
SHL AX,CL ;GET OFFSET
|
||||
MOV CX,AX
|
||||
CALL LOCPRS ;OUT OFFSET
|
||||
POP CX
|
||||
ADD CX,DOSSGM
|
||||
CALL LOCPR ;OUT TOP
|
||||
MOV DX,NXTPGH ;GET NEXT PARAGRAPH
|
||||
LOADEN:
|
||||
RET
|
||||
;
|
||||
; READ ONE SECTOR
|
||||
;
|
||||
READ:
|
||||
MOV DX,OFFSET WKFCB
|
||||
MOV CL,CREAD
|
||||
INT BDOS ;READ ONE SECTOR
|
||||
OR AL,AL
|
||||
JZ LOADEN ;OK
|
||||
JMP ERLOAD ;NO DATA OR SO
|
||||
;
|
||||
; DISPLAY LINE
|
||||
; INPUT
|
||||
; DX:PARAGRAPH OFFSET OF TOP
|
||||
; CX:NAME COMMENT POINTER
|
||||
;
|
||||
DSPLIN:
|
||||
PUSH DX
|
||||
PUSH CX
|
||||
CALL CRLF
|
||||
POP CX
|
||||
CALL BUFPRN ;OUT NAME
|
||||
POP AX
|
||||
PUSH AX
|
||||
MOV CL,4
|
||||
SHL AX,CL
|
||||
MOV CX,AX
|
||||
CALL LOCPRS ;OUT OFFSET
|
||||
POP CX
|
||||
ADD CX,DOSSGM
|
||||
JMPS LOCPR ;OUT LOCATION
|
||||
;
|
||||
; OUT LOCATION
|
||||
; INPUT
|
||||
; CX:OFFSET
|
||||
;
|
||||
LOCPRS:
|
||||
CALL LOCPRD ;OUT NUMBER PART
|
||||
MOV CL,'H'
|
||||
JMP CONOUT
|
||||
;
|
||||
; OUT LOCATION
|
||||
; INPUT
|
||||
; CX:PARAGRAPH DATA
|
||||
;
|
||||
LOCPR:
|
||||
CALL LOCPRD ;OUT NUMBER PART
|
||||
MOV CL,'0'
|
||||
CALL CONOUT
|
||||
MOV CL,'H'
|
||||
JMP CONOUT
|
||||
;
|
||||
; OUT HEXADECIMAL WORD DATA
|
||||
; INPUT
|
||||
; CX:DATA
|
||||
;
|
||||
LOCPRD:
|
||||
PUSH CX
|
||||
MOV CL,' '
|
||||
CALL CONOUT
|
||||
MOV CL,' '
|
||||
CALL CONOUT
|
||||
POP CX
|
||||
PUSH CX
|
||||
MOV CL,CH
|
||||
CALL HXPRN ;PRINT HIGHER
|
||||
POP CX ;TO PRINT LOSER
|
||||
;
|
||||
; PRINT BY HEXADECIMAL
|
||||
; INPUT
|
||||
; CL:DATA
|
||||
;
|
||||
HXPRN:
|
||||
PUSH CX
|
||||
SHR CL,1
|
||||
SHR CL,1
|
||||
SHR CL,1
|
||||
SHR CL,1
|
||||
CALL HXPRH ;PRINT HIGHER NIBBLE
|
||||
POP CX
|
||||
HXPRH:
|
||||
AND CL,0FH
|
||||
ADD CL,'0'
|
||||
CMP CL,'9'+1
|
||||
JC CONOUT ;0 TO 9
|
||||
ADD CL,7
|
||||
JMPS CONOUT ;A TO F
|
||||
;
|
||||
; CONSOLE OUT
|
||||
; INPUT
|
||||
; CL:CODE
|
||||
;
|
||||
CONOUT:
|
||||
PUSH AX
|
||||
MOV DL,CL
|
||||
MOV CL,CCONOT
|
||||
INT BDOS
|
||||
POP AX
|
||||
RET
|
||||
;
|
||||
; PRINT BUFFERED STRING
|
||||
; INPUT
|
||||
; CX:STRING POINTER
|
||||
;
|
||||
BUFPRN:
|
||||
MOV DX,CX
|
||||
MOV CL,CBUFPR
|
||||
INT BDOS
|
||||
RET
|
||||
;
|
||||
; CARRIAGE RETURN & LINE FEED
|
||||
;
|
||||
CRLF:
|
||||
MOV CL,CR
|
||||
CALL CONOUT
|
||||
MOV CL,LF
|
||||
JMPS CONOUT
|
||||
;
|
||||
DAREA EQU $
|
||||
;
|
||||
DSEG
|
||||
ORG OFFSET DAREA
|
||||
;
|
||||
; COMENTS
|
||||
;
|
||||
CARLOD DB CR,LF,'CP/NET-86 IS ALREADY LOADED.$'
|
||||
CSTUP DB CR,LF,LF,'CP/NET-86 VER.1.00 LOADER'
|
||||
DB CR,LF,'==========================$'
|
||||
CNOAVL DB CR,LF,'NO AVAILABLE MEMORY FOR CP/NET-86$'
|
||||
CLERR DB ' LOADING ERROR OF THIS FILE$'
|
||||
CLEND DB CR,LF,'CP/NET-86 LOADING COMPLETE.',CR,LF,'$'
|
||||
;
|
||||
CCCP DB 'CCP $'
|
||||
CBDOS DB 'BDOS $'
|
||||
CBIOS DB 'BIOS $'
|
||||
CCCPN DB 'CCPN SYS$'
|
||||
CNDOS DB 'NDOS SYS$'
|
||||
CSNIOS DB 'SNIOS SYS$'
|
||||
CTPA DB 'TPA $'
|
||||
;
|
||||
; WORK AREA
|
||||
;
|
||||
; MEMORY CONTROL BLOCK
|
||||
;
|
||||
WKMCB DW 0 ;BASE
|
||||
DW 0FFF0H ;LENGTH
|
||||
DB 0 ;EXTENT
|
||||
;
|
||||
; DIRECT BIOS CALL WORK
|
||||
;
|
||||
WKBIOS DB 18 ;GET MEMORY REGION TABLE
|
||||
DW 0 ;INPUT PARAMETER NOT USED
|
||||
DW 0
|
||||
;
|
||||
LODOFF RW 1 ;LOAD OFFSET BY PARAGRAPH
|
||||
NDOSOF RW 1 ;NDOS OFFSET BY PARAGRAPH
|
||||
;
|
||||
NDOSEN RW 1 ;NDOS ENTRY
|
||||
DOSSGM RW 1 ;DOS SEGMENT
|
||||
;
|
||||
; LOADER WORK
|
||||
;
|
||||
WKFCB RB 33 ;FCB
|
||||
RDWORK RB 128 ;WORKING FOR ONE SECTOR READ
|
||||
CODLNG RW 1 ;CODE AREA LENGTH
|
||||
TOPPGH RW 1 ;TOP PARAGRAPH
|
||||
NXTPGH RW 1 ;NEXT PARAGRAPH
|
||||
LODTOP RW 1 ;LOADING TOP
|
||||
;
|
||||
;
|
||||
RS 64
|
||||
STACK:
|
||||
DB 0
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
450
CP-NET/CPNET-86 SOURCE/CPNETSTS.A86
Normal file
450
CP-NET/CPNET-86 SOURCE/CPNETSTS.A86
Normal file
@@ -0,0 +1,450 @@
|
||||
|
||||
; C P N E T S T S - FOR CP/NET-86
|
||||
;--------------------------------------------
|
||||
; CP/NET NETWORK STATUS DISPLAY PROGRAM
|
||||
;
|
||||
TITLE 'NETWORK STATUS DISPLAY FOR CP/NET-86'
|
||||
;
|
||||
; AUG-31-1983 BASE
|
||||
;
|
||||
; EQUATION OF FIXED ADDRESS
|
||||
;
|
||||
BDOS EQU 224 ;BDOS ENTRY POINT
|
||||
;
|
||||
; EQUATION OF BDOS FUNCTION CODE
|
||||
;
|
||||
FGETV EQU 12 ;GET VERSION NUMBER
|
||||
FGETNS EQU 68 ;GET NETWORK STATUS
|
||||
FGETCT EQU 69 ;GET CONFIGURATION TABLE ADDRESS
|
||||
;
|
||||
; EQUATION OF OTHER DATA
|
||||
;
|
||||
M EQU BYTE PTR 0[BX]
|
||||
LF EQU 0AH ;LINE FEED CODE
|
||||
CR EQU 0DH ;CARRIAGE RETURN CODE
|
||||
ETX EQU '$' ;TERMINATION CHARACTER
|
||||
;
|
||||
; PROGRAM START
|
||||
;
|
||||
ORG 100H
|
||||
;
|
||||
JMP START
|
||||
L_1 EQU $
|
||||
DSEG
|
||||
ORG OFFSET L_1
|
||||
;
|
||||
; DISPLAY MESSAGE AREA
|
||||
;
|
||||
MSG1 RS 0
|
||||
DB CR,LF,'CP/NET-86 1.0 Status'
|
||||
DB CR,LF,'===================='
|
||||
DB CR,LF,ETX
|
||||
MSG2 RS 0
|
||||
DB 'Requester ID = '
|
||||
DB ETX
|
||||
MSG3 RS 0
|
||||
DB CR,LF,'Network Status Byte = '
|
||||
DB ETX
|
||||
MSG4 RS 0
|
||||
DB CR,LF,'Disk device status:'
|
||||
DB CR,LF,ETX
|
||||
MSG5 RS 0
|
||||
DB ' Drive '
|
||||
DB ETX
|
||||
MSG6 RS 0
|
||||
DB ' = Drive '
|
||||
DB ETX
|
||||
MSG7 RS 0
|
||||
DB ' on Network Server ID = '
|
||||
DB ETX
|
||||
MSG8 RS 0
|
||||
DB ' = LOCAL'
|
||||
DB ETX
|
||||
MSG9 RS 0
|
||||
DB 'Console Device = '
|
||||
DB ETX
|
||||
MSG10 RS 0
|
||||
DB 'Console #'
|
||||
DB ETX
|
||||
MSG11 RS 0
|
||||
DB ' on Network Server ID = '
|
||||
DB ETX
|
||||
MSG12 RS 0
|
||||
DB 'LOCAL'
|
||||
DB ETX
|
||||
MSG13 RS 0
|
||||
DB 'List Device = '
|
||||
DB ETX
|
||||
MSG14 RS 0
|
||||
DB 'List #'
|
||||
DB ETX
|
||||
MSG15 RS 0
|
||||
DB ' on Network Server ID = '
|
||||
DB ETX
|
||||
MSG16 RS 0
|
||||
DB 'LOCAL'
|
||||
DB ETX
|
||||
MSG17 RS 0
|
||||
DB CR,LF,'CP/NET-86 has not been loaded.'
|
||||
DB ETX
|
||||
L_2 EQU $
|
||||
CSEG
|
||||
ORG OFFSET L_2
|
||||
;
|
||||
; START OF PROGRAM
|
||||
;
|
||||
START:
|
||||
MOV BX,0
|
||||
LAHF
|
||||
ADD BX,SP
|
||||
RCR SI,1
|
||||
SAHF
|
||||
RCL SI,1
|
||||
MOV Word Ptr OLDSP,BX ;SAVE SYSTEM STACK
|
||||
MOV SP,(OFFSET NEWSP)
|
||||
CALL GETVER ;GET CP/M VERSION NUBMER
|
||||
MOV DX,0200H
|
||||
CALL ANDHD
|
||||
MOV AL,0
|
||||
CALL SUBHD
|
||||
OR AL,BL ;CHECK CP/NET LOADED
|
||||
JNZ L_3
|
||||
JMP NOTNET ;CP/NET UNLOADED
|
||||
L_3:
|
||||
MOV CX,(OFFSET MSG1) ;TITLE DISPLAY
|
||||
CALL MSGOUT
|
||||
CALL GETCTA ;GET CONFIGURATION TABLE ADDRESS
|
||||
MOV WORD PTR CTBADR,BX ;SAVE TABLE ADDRESS
|
||||
MOV CX,(OFFSET MSG2) ;'REQUESTER ID = '
|
||||
CALL MSGOUT
|
||||
MOV BX,WORD PTR CTBADR ;GET CONFIG TABLE ADDRESS
|
||||
LAHF
|
||||
INC BX
|
||||
SAHF
|
||||
MOV CL,ES:M ;GET REQUESTER ID CODE
|
||||
CALL DSPBCD ;DISPLAY ID NUMBER
|
||||
MOV CX,(OFFSET MSG3) ;'NETWORK STATUS BYTE = '
|
||||
CALL MSGOUT
|
||||
CALL GETNST ;GET NETWORK STATUS
|
||||
MOV CL,AL
|
||||
CALL DSPBCD ;DISPLAY NETWORK STATUS BYTE
|
||||
MOV CX,(OFFSET MSG4) ;'DISK DEVICE STATUS: '
|
||||
CALL MSGOUT
|
||||
MOV BX,(OFFSET DEVCNT)
|
||||
MOV M,0
|
||||
;
|
||||
DRVDSP:
|
||||
MOV AL,15
|
||||
MOV BX,(OFFSET DEVCNT) ;SET DEVICE COUNT
|
||||
CMP AL,M
|
||||
JNB L_4
|
||||
JMP CONDSP ;CONSOLE DEVICE DISPLAY
|
||||
L_4:
|
||||
MOV CX,(OFFSET MSG5) ;'DRIVE '
|
||||
CALL MSGOUT
|
||||
MOV AL,BYTE PTR DEVCNT ;GET DEVICE COUNT
|
||||
ADD AL,'A' ;ADJUST TO A-P
|
||||
MOV CL,AL
|
||||
CALL CONOUT ;DISPLAY DRIVE NUMBER
|
||||
MOV CL,':'
|
||||
CALL CONOUT ;DISPLAY ':'
|
||||
MOV BX,WORD PTR DEVCNT
|
||||
MOV BH,0
|
||||
MOV CX,2
|
||||
SHL BX,1
|
||||
ADD BX,CX
|
||||
XCHG BX,DX
|
||||
MOV BX,WORD PTR CTBADR ;GET CONFIG TABLE ADDRESS
|
||||
ADD BX,DX
|
||||
MOV BL,ES:M
|
||||
MOV AL,BL
|
||||
MOV BYTE PTR WCDFLG,AL
|
||||
AND AL,80H
|
||||
CMP AL,0
|
||||
JZ DLOCAL ;DISPLAY 'LOCAL'
|
||||
MOV CX,(OFFSET MSG6) ;' = DRIVE '
|
||||
CALL MSGOUT
|
||||
MOV AL,BYTE PTR WCDFLG
|
||||
AND AL,0FH
|
||||
ADD AL,'A'
|
||||
MOV CL,AL
|
||||
CALL CONOUT ;DISPLAY DRIVE NUMBER
|
||||
MOV CL,':'
|
||||
CALL CONOUT ;DISPLAY ':'
|
||||
MOV CX,(OFFSET MSG7) ;' ON NETWORK SERVER ID = '
|
||||
CALL MSGOUT
|
||||
MOV BX,WORD PTR DEVCNT
|
||||
MOV BH,0
|
||||
MOV CX,2
|
||||
SHL BX,1
|
||||
LAHF
|
||||
ADD BX,CX
|
||||
SAHF
|
||||
XCHG BX,DX
|
||||
MOV BX,WORD PTR CTBADR ;GET CONFIG TABLE ADDRESS
|
||||
LAHF
|
||||
ADD BX,DX
|
||||
RCR SI,1
|
||||
SAHF
|
||||
RCL SI,1
|
||||
LAHF
|
||||
INC BX
|
||||
SAHF
|
||||
MOV AL,ES:M
|
||||
MOV CL,AL
|
||||
CALL DSPBCD
|
||||
JMPS DSKEND
|
||||
;
|
||||
; DISPLAY 'LOCAL' FOR DISK DRIVE
|
||||
;
|
||||
DLOCAL:
|
||||
MOV CX,(OFFSET MSG8) ;' = LOCAL'
|
||||
CALL MSGOUT
|
||||
DSKEND:
|
||||
CALL CRLF ;CR,LF
|
||||
MOV BX,(OFFSET DEVCNT)
|
||||
INC M
|
||||
JZ L_5
|
||||
JMP DRVDSP
|
||||
L_5:
|
||||
;
|
||||
CONDSP:
|
||||
MOV CX,(OFFSET MSG9) ;'CONSOLE DEVICE = '
|
||||
CALL MSGOUT
|
||||
MOV CX,34
|
||||
MOV BX,WORD PTR CTBADR ;GET CONFIG TABLE ADDRESS
|
||||
ADD BX,CX
|
||||
MOV BL,ES:M ;GET CONSOLE DEVICE CONDITION FLAG
|
||||
MOV AL,BL
|
||||
MOV BYTE PTR WCDFLG,AL ;STORE CONDITION BYTE
|
||||
AND AL,80H ;MSB CHECK
|
||||
CMP AL,0
|
||||
JZ CLOCAL ;DISPLAY 'LOCAL'
|
||||
MOV CX,(OFFSET MSG10) ;'CONSOLE #'
|
||||
CALL MSGOUT
|
||||
MOV AL,BYTE PTR WCDFLG ;GET CONDITION BYTE
|
||||
AND AL,0FH ;CLEAR UPPER NIBBLE
|
||||
MOV CL,AL
|
||||
CALL HEXDSP
|
||||
MOV CX,(OFFSET MSG11) ;'ON NETWORK SERVER ID = '
|
||||
CALL MSGOUT
|
||||
MOV CX,34
|
||||
MOV BX,WORD PTR CTBADR ;GET COFING TABLE ADDRESS
|
||||
LAHF
|
||||
ADD BX,CX
|
||||
RCR SI,1
|
||||
SAHF
|
||||
RCL SI,1
|
||||
LAHF
|
||||
INC BX
|
||||
SAHF
|
||||
MOV AL,ES:M ;GET CONSOLE DEVICE (SERVER ID)
|
||||
MOV CL,AL
|
||||
CALL DSPBCD
|
||||
JMPS LSTDSP ;LIST DEVICE DISPLAY
|
||||
;
|
||||
CLOCAL:
|
||||
MOV CX,(OFFSET MSG12) ;'LOCAL'
|
||||
CALL MSGOUT
|
||||
;
|
||||
LSTDSP:
|
||||
CALL CRLF
|
||||
MOV CX,(OFFSET MSG13) ;'LIST DEVICE = '
|
||||
CALL MSGOUT
|
||||
MOV CX,36
|
||||
MOV BX,WORD PTR CTBADR ;GET COFIG TABLE ADDRESS
|
||||
ADD BX,CX
|
||||
MOV BL,ES:M ;GET LIST DEVICE CONDITION FLAG
|
||||
MOV AL,BL
|
||||
MOV BYTE PTR WCDFLG,AL
|
||||
AND AL,80H ;MSB CHECK
|
||||
CMP AL,0
|
||||
JZ LLOCAL ;DISPLAY 'LOCAL'
|
||||
MOV CX,(OFFSET MSG14) ;'LIST # '
|
||||
CALL MSGOUT
|
||||
MOV AL,BYTE PTR WCDFLG
|
||||
AND AL,0FH
|
||||
MOV CL,AL
|
||||
CALL HEXDSP
|
||||
MOV CX,(OFFSET MSG15) ;' ON NETWORK SERVER ID = '
|
||||
CALL MSGOUT
|
||||
MOV CX,36
|
||||
MOV BX,WORD PTR CTBADR ;GET CONFIG TABLE ADDRESS
|
||||
LAHF
|
||||
ADD BX,CX
|
||||
RCR SI,1
|
||||
SAHF
|
||||
RCL SI,1
|
||||
LAHF
|
||||
INC BX
|
||||
SAHF
|
||||
MOV AL,ES:M ;GET LIST DEVICE
|
||||
MOV CL,AL
|
||||
CALL DSPBCD ;DISPLAY LIST DEVICE NUMBER (SERVER ID)
|
||||
JMPS ENDSTS
|
||||
;
|
||||
LLOCAL:
|
||||
MOV CX,(OFFSET MSG16) ;'LOCAL'
|
||||
CALL MSGOUT
|
||||
JMPS ENDSTS
|
||||
;
|
||||
; PROGRAM ABORT FOR CP/NET UNLOADED
|
||||
;
|
||||
NOTNET:
|
||||
MOV CX,(OFFSET MSG17) ;'CP/NET 1.2 HAS NOT BEEN LOADED.'
|
||||
CALL MSGOUT
|
||||
;
|
||||
; RETURN TO SYSTEM
|
||||
;
|
||||
ENDSTS: ;END OF CPNETSTS
|
||||
CALL RETSYS ;RETURN TO SYSTEM
|
||||
STI
|
||||
HLT ;ERROR STOP
|
||||
;
|
||||
; SET SYSTEM STACK
|
||||
;
|
||||
RETSYS:
|
||||
MOV BX,WORD PTR OLDSP ;GET SYSTEM STACK
|
||||
MOV SP,BX
|
||||
IRET ;RETURN TO SYSTEM
|
||||
;
|
||||
; CONSOLE OUT
|
||||
;
|
||||
CONOUT:
|
||||
MOV DL,CL
|
||||
MOV CL,2
|
||||
INT BDOS
|
||||
RET
|
||||
;
|
||||
; MESSAGE STRING OUT
|
||||
; INPUT
|
||||
; BC:TEXT ADDRESS
|
||||
;
|
||||
MSGOUT:
|
||||
MOV DH,CH ;SET MESSAGE TEXT ADDRESS
|
||||
MOV DL,CL
|
||||
MOV CL,9
|
||||
INT BDOS
|
||||
RET
|
||||
;
|
||||
; GET CP/M VERSION NUMBER
|
||||
; OUTPUT
|
||||
; H:CP/M OR MP/M
|
||||
; L:VERSION NUMBER
|
||||
;
|
||||
GETVER:
|
||||
MOV DX,0
|
||||
MOV CL,FGETV
|
||||
INT BDOS
|
||||
RET
|
||||
;
|
||||
; GET NETWORK STATUS
|
||||
; OUTPUT
|
||||
; A:NET WORK STATUS BYTE
|
||||
;
|
||||
GETNST:
|
||||
MOV DX,0
|
||||
MOV CL,FGETNS
|
||||
INT BDOS
|
||||
RET
|
||||
;
|
||||
; GET REQUESTER CONFIGURATION TABLE ADDRESS
|
||||
; OUTPUT
|
||||
; HL:TABLE ADDRESS
|
||||
;
|
||||
GETCTA:
|
||||
MOV DX,0
|
||||
MOV CL,FGETCT
|
||||
INT BDOS
|
||||
RET
|
||||
;
|
||||
; PUT CR,LF TO CONSOLE
|
||||
;
|
||||
CRLF:
|
||||
MOV CL,CR ;SET CR CODE
|
||||
CALL CONOUT
|
||||
MOV CL,LF ;SET LF CODE
|
||||
CALL CONOUT
|
||||
RET
|
||||
;
|
||||
; DISPLAY HEXA DECIMAL
|
||||
;
|
||||
HEXDSP:
|
||||
MOV BX,(OFFSET WHEXVA)
|
||||
MOV M,CL
|
||||
MOV AL,9
|
||||
MOV BX,(OFFSET WHEXVA)
|
||||
CMP AL,M
|
||||
JNB HEXOVR
|
||||
MOV AL,BYTE PTR WHEXVA
|
||||
ADD AL,'A' ;ADJUST TO ASCII CODE
|
||||
SUB AL,10
|
||||
MOV CL,AL
|
||||
CALL CONOUT
|
||||
RET
|
||||
;
|
||||
HEXOVR:
|
||||
MOV AL,BYTE PTR WHEXVA
|
||||
ADD AL,'0' ;ADJUST TO ASCII CODE
|
||||
MOV CL,AL
|
||||
CALL CONOUT
|
||||
RET
|
||||
;
|
||||
; DISPLAY BCD VALUE
|
||||
;
|
||||
DSPBCD:
|
||||
MOV BX,(OFFSET WACONV)
|
||||
MOV M,CL
|
||||
MOV AL,BYTE PTR WACONV
|
||||
AND AL,0F8H
|
||||
RCR AL,1
|
||||
RCR AL,1
|
||||
RCR AL,1
|
||||
RCR AL,1
|
||||
MOV CL,AL
|
||||
CALL HEXDSP
|
||||
MOV AL,BYTE PTR WACONV
|
||||
AND AL,00FH
|
||||
MOV CL,AL
|
||||
CALL HEXDSP
|
||||
MOV CL,48H
|
||||
CALL CONOUT
|
||||
RET
|
||||
;
|
||||
ANDHD:
|
||||
MOV AL,DL
|
||||
AND AL,BL
|
||||
MOV BL,AL
|
||||
MOV AL,DH
|
||||
AND AL,BH
|
||||
MOV BH,AL
|
||||
RET
|
||||
;
|
||||
SUBHD:
|
||||
MOV DL,AL
|
||||
MOV DH,0
|
||||
MOV AL,DL
|
||||
SUB AL,BL
|
||||
MOV BL,AL
|
||||
MOV AL,DH
|
||||
SBB AL,BH
|
||||
MOV BH,AL
|
||||
RET
|
||||
L_6 EQU $
|
||||
DSEG
|
||||
ORG OFFSET L_6
|
||||
;
|
||||
; WORKING STRAGE AREA
|
||||
;
|
||||
RS 40 ;LOCAL STACK AREA
|
||||
NEWSP RS 0 ;LOCAL STACK POINT
|
||||
OLDSP RS 2 ;SYSTEM STACK SAVE
|
||||
OUTCHR RS 1 ;OUTPUT CHARACTER
|
||||
WHEXVA RS 1 ;WORK FOR HEX CONVERT
|
||||
WACONV RS 1 ;FOR ASCII CONVERT
|
||||
DEVCNT RS 1 ;DEVICE COUNTER
|
||||
WCDFLG RS 1 ;CONDITION BYTE SAVE AREA
|
||||
CTBADR RS 2 ;COFIGURATION TABLE ADDRESS SAVE AREA
|
||||
;
|
||||
END
|
||||
|
||||
179
CP-NET/CPNET-86 SOURCE/LOGIN.A86
Normal file
179
CP-NET/CPNET-86 SOURCE/LOGIN.A86
Normal file
@@ -0,0 +1,179 @@
|
||||
|
||||
TITLE 'LOGIN TRANSIENT PROGRAM FOR CP/NET-86'
|
||||
;***************************************************************
|
||||
;***************************************************************
|
||||
;** **
|
||||
;** L O G I N T R A N S I E N T P R O G R A M **
|
||||
;** F O R C P / N E T - 8 6 **
|
||||
;** **
|
||||
;***************************************************************
|
||||
;***************************************************************
|
||||
;
|
||||
; EQUATION OF FIXED DATA
|
||||
;
|
||||
M EQU BYTE PTR 0[BX]
|
||||
;
|
||||
BDOS EQU 224 ;BDOS ENTRY POINT
|
||||
BUFF EQU 0080H
|
||||
;
|
||||
; EQUATION OF BDOS FUNCTION CODE
|
||||
;
|
||||
PRINT EQU 9
|
||||
VERSION EQU 12
|
||||
LOGIN EQU 64
|
||||
CFGTBL EQU 69
|
||||
ACTIVE EQU 00010000B
|
||||
;
|
||||
;
|
||||
CSEG
|
||||
ORG 100H
|
||||
;
|
||||
START:
|
||||
MOV BX,0
|
||||
ADD BX,SP
|
||||
MOV SP,(OFFSET CCPSTACK)+2
|
||||
PUSH BX ; SAVE CCP STACK POINTER
|
||||
MOV CL,VERSION
|
||||
INT BDOS ; GET VERSION NUMBER
|
||||
MOV AL,BH
|
||||
AND AL,00000010B
|
||||
JNZ L_1
|
||||
JMP VERSIONERR ; JUMP IF CP/NET NOT LOADED
|
||||
L_1:
|
||||
MOV DX,(OFFSET PASSWORDMSG)
|
||||
MOV BX,BUFF
|
||||
MOV AL,M ; GET # CHARS IN THE COMMAND TAIL
|
||||
OR AL,AL
|
||||
JNZ L_2
|
||||
JMP DOLOGIN ; DEFAULT LOGIN IF EMPTY COMMAND TAIL
|
||||
L_2:
|
||||
PUSH DX ; SAVE LOGIN MSG ADDRESS
|
||||
MOV CL,AL ; A = # CHARS IN COMMAND TAIL
|
||||
XOR AL,AL
|
||||
MOV CH,AL ; B WILL ACCUMULATE MASTER ID
|
||||
SCANBLNKS:
|
||||
INC BX
|
||||
MOV AL,M
|
||||
CMP AL,' '
|
||||
JNZ PASTBLNKS ; SKIP PAST LEADING BLANKS
|
||||
DEC CL
|
||||
JNZ SCANBLNKS
|
||||
JMPS PRELOGIN ; JUMP IF COMMAND TAIL EXHAUSTED
|
||||
;
|
||||
PASTBLNKS:
|
||||
CMP AL,'['
|
||||
JZ SCANMSTRID
|
||||
POP DX ; DISCARD OLD LOGIN MSG ADR
|
||||
MOV DX,(OFFSET BLANKMSG)
|
||||
PUSH DX ; PUSH NEW LOGIN MSG ADR
|
||||
SCANLFTBRKT:
|
||||
MOV AL,M
|
||||
CMP AL,'['
|
||||
JZ SCANMSTRID
|
||||
LAHF
|
||||
INC DX
|
||||
SAHF
|
||||
MOV SI,DX ;UPDATE THE PASSWORD
|
||||
MOV [SI],AL
|
||||
LAHF
|
||||
INC BX
|
||||
SAHF
|
||||
DEC CL
|
||||
JNZ SCANLFTBRKT
|
||||
JMPS PRELOGIN
|
||||
;
|
||||
SCANMSTRID:
|
||||
LAHF
|
||||
INC BX
|
||||
SAHF
|
||||
DEC CL
|
||||
JZ LOGINERR
|
||||
MOV AL,M
|
||||
CMP AL,']'
|
||||
JZ PRELOGIN
|
||||
SUB AL,'0'
|
||||
CMP AL,10
|
||||
JB UPDATEID
|
||||
ADD AL,('0'-'A'+10) AND 0FFH
|
||||
CMP AL,16
|
||||
JNB LOGINERR
|
||||
UPDATEID:
|
||||
LAHF
|
||||
XCHG AL,AH
|
||||
PUSH AX
|
||||
MOV AL,CH
|
||||
ADD AL,AL
|
||||
ADD AL,AL
|
||||
ADD AL,AL
|
||||
ADD AL,AL
|
||||
MOV CH,AL ; ACCUM * 16
|
||||
POP AX
|
||||
XCHG AL,AH
|
||||
ADD AL,CH
|
||||
MOV CH,AL
|
||||
JMPS SCANMSTRID
|
||||
PRELOGIN:
|
||||
MOV AL,CH
|
||||
POP DX
|
||||
MOV SI,DX
|
||||
MOV [SI],AL
|
||||
DOLOGIN:
|
||||
MOV CL,LOGIN
|
||||
INT BDOS
|
||||
INC AL
|
||||
JNZ LOGINOK
|
||||
MOV DX,(OFFSET LOGINFAILEDMSG)
|
||||
JMPS PRINTMSG
|
||||
;
|
||||
VERSIONERR:
|
||||
MOV DX,(OFFSET VERSIONERRMSG)
|
||||
JMPS PRINTMSG
|
||||
;
|
||||
LOGINERR:
|
||||
MOV DX,(OFFSET LOGINERRMSG)
|
||||
PRINTMSG:
|
||||
MOV CL,PRINT
|
||||
INT BDOS
|
||||
JMPS EXIT
|
||||
;
|
||||
LOGINOK:
|
||||
MOV CL,CFGTBL
|
||||
INT BDOS ; GET CONFIGURATION TABLE ADDRESS
|
||||
MOV AL,ES:M
|
||||
OR AL,ACTIVE ; SET ACTIVE BIT TRUE
|
||||
MOV ES:M,AL
|
||||
EXIT:
|
||||
POP BX
|
||||
MOV SP,BX ; RESTORE CCP STACK POINTER
|
||||
IRET
|
||||
;
|
||||
;
|
||||
;
|
||||
L_3 EQU $
|
||||
DSEG
|
||||
ORG OFFSET L_3
|
||||
;
|
||||
; LOCAL DATA SEGMENT
|
||||
;
|
||||
PASSWORDMSG RS 0
|
||||
DB 00H ; MASTER ID #
|
||||
DB 'PASSWORD' ; PASSWORD
|
||||
VERSIONERRMSG RS 0
|
||||
DB 'CP/NET-86 is not loaded.'
|
||||
DB '$'
|
||||
LOGINERRMSG RS 0
|
||||
DB 'Illegal LOGIN Command.'
|
||||
DB '$'
|
||||
LOGINFAILEDMSG RS 0
|
||||
DB 'LOGIN Failed.'
|
||||
DB '$'
|
||||
LCLSTACK RS 0
|
||||
DW 0C7C7H,0C7C7H,0C7C7H,0C7C7H,0C7C7H
|
||||
DW 0C7C7H,0C7C7H,0C7C7H,0C7C7H,0C7C7H
|
||||
CCPSTACK RS 0
|
||||
DW (OFFSET $)-(OFFSET $)
|
||||
BLANKMSG RS 0
|
||||
DB 00H ; MASTER ID #
|
||||
DB ' ' ; PASSWORD
|
||||
END
|
||||
|
||||
131
CP-NET/CPNET-86 SOURCE/LOGOFF.A86
Normal file
131
CP-NET/CPNET-86 SOURCE/LOGOFF.A86
Normal file
@@ -0,0 +1,131 @@
|
||||
|
||||
TITLE 'LOGOFF TRANSIENT PROGRAM FOR CP/NET-86'
|
||||
;***************************************************************
|
||||
;***************************************************************
|
||||
;** **
|
||||
;** L O G O F F T R A N S I E N T P R O G R A M **
|
||||
;** F O R C P / N E T - 8 6
|
||||
;** **
|
||||
;***************************************************************
|
||||
;***************************************************************
|
||||
;
|
||||
; EQUATES
|
||||
;
|
||||
M EQU BYTE PTR 0[BX]
|
||||
;
|
||||
BDOS EQU 224
|
||||
BUFF EQU 0080H
|
||||
PRINT EQU 9
|
||||
VERSION EQU 12
|
||||
LOGOFF EQU 65
|
||||
CFGTBL EQU 69
|
||||
NOACTV EQU 11101111B
|
||||
;
|
||||
START:
|
||||
MOV BX,0
|
||||
ADD BX,SP
|
||||
MOV SP,(Offset CCPSTACK)+2
|
||||
PUSH BX ; SAVE CCP STACK POINTER
|
||||
MOV CL,VERSION
|
||||
INT BDOS ; GET VERSION NUMBER
|
||||
MOV AL,BH
|
||||
AND AL,00000010B
|
||||
JNZ L_1
|
||||
JMP VERSIONERR ; CP/NET MUST BE LOADED
|
||||
L_1:
|
||||
MOV DL,0 ; DEFAULT MSTR ID = 00H
|
||||
MOV BX,BUFF
|
||||
MOV AL,M ; GET # CHARS IN THE COMMAND TAIL
|
||||
OR AL,AL
|
||||
JZ DOLOGOFF ; DEFAULT LOGOFF IF EMPTY COMMAND TAIL
|
||||
MOV CL,AL ; A = # CHARS IN COMMAND TAIL
|
||||
XOR AL,AL
|
||||
SCANBLNKS:
|
||||
INC BX
|
||||
MOV AL,M
|
||||
CMP AL,' '
|
||||
JNZ PASTBLNKS ; SKIP LEADING BLANKS
|
||||
DEC CL
|
||||
JNZ SCANBLNKS
|
||||
JMPS DOLOGOFF
|
||||
PASTBLNKS:
|
||||
CMP AL,'['
|
||||
JNZ LOGOFFERR
|
||||
SCANMSTRID:
|
||||
LAHF
|
||||
INC BX
|
||||
SAHF
|
||||
DEC CL
|
||||
JZ LOGOFFERR
|
||||
MOV AL,M
|
||||
CMP AL,']'
|
||||
JZ DOLOGOFF
|
||||
SUB AL,'0'
|
||||
CMP AL,10
|
||||
JB UPDATEID
|
||||
ADD AL,('0'-'A'+10) AND 0FFH
|
||||
CMP AL,16
|
||||
JNB LOGOFFERR
|
||||
UPDATEID:
|
||||
LAHF
|
||||
XCHG AL,AH
|
||||
PUSH AX
|
||||
MOV AL,DL
|
||||
ADD AL,AL
|
||||
ADD AL,AL
|
||||
ADD AL,AL
|
||||
ADD AL,AL
|
||||
MOV DL,AL ; ACCUM * 16
|
||||
POP AX
|
||||
XCHG AL,AH
|
||||
ADD AL,DL
|
||||
MOV DL,AL
|
||||
JMPS SCANMSTRID
|
||||
DOLOGOFF:
|
||||
MOV CL,LOGOFF
|
||||
INT BDOS
|
||||
INC AL
|
||||
JNZ LOGOFFOK
|
||||
MOV DX,(Offset LOGOFFAILEDMSG)
|
||||
JMPS PRINTMSG
|
||||
VERSIONERR:
|
||||
MOV DX,(Offset VERSIONERRMSG)
|
||||
JMPS PRINTMSG
|
||||
LOGOFFERR:
|
||||
MOV DX,(Offset LOGOFFERRMSG)
|
||||
PRINTMSG:
|
||||
MOV CL,PRINT
|
||||
INT BDOS
|
||||
JMPS EXIT
|
||||
LOGOFFOK:
|
||||
MOV CL,CFGTBL
|
||||
INT BDOS ; GET CONFIG TABLE ADDRESS
|
||||
MOV AL,ES:M
|
||||
AND AL,NOACTV ; TURN OFF ACTIVE BIT
|
||||
MOV ES:M,AL
|
||||
EXIT:
|
||||
POP BX
|
||||
MOV SP,BX ; RESTORE CCP STACK POINTER
|
||||
RET
|
||||
L_2 EQU $
|
||||
DSEG
|
||||
ORG Offset L_2
|
||||
;
|
||||
; LOCAL DATA SEGMENT
|
||||
;
|
||||
VERSIONERRMSG RS 0
|
||||
DB 'CP/NET-86 is not loaded.'
|
||||
DB '$'
|
||||
LOGOFFERRMSG RS 0
|
||||
DB 'Illegal LOGOFF Command.'
|
||||
DB '$'
|
||||
LOGOFFAILEDMSG RS 0
|
||||
DB 'LOGOFF Failed.'
|
||||
DB '$'
|
||||
LCLSTACK RS 0
|
||||
DW 0C7C7H,0C7C7H,0C7C7H,0C7C7H,0C7C7H
|
||||
DW 0C7C7H,0C7C7H,0C7C7H,0C7C7H,0C7C7H
|
||||
CCPSTACK RS 0
|
||||
DW (Offset $)-(Offset $)
|
||||
;
|
||||
END
|
||||
1815
CP-NET/CPNET-86 SOURCE/NDOS.A86
Normal file
1815
CP-NET/CPNET-86 SOURCE/NDOS.A86
Normal file
File diff suppressed because it is too large
Load Diff
1815
CP-NET/CPNET-86 SOURCE/NDOSO.A86
Normal file
1815
CP-NET/CPNET-86 SOURCE/NDOSO.A86
Normal file
File diff suppressed because it is too large
Load Diff
1
CP-NET/CPNET-86 SOURCE/README.MARKDOWN
Normal file
1
CP-NET/CPNET-86 SOURCE/README.MARKDOWN
Normal file
@@ -0,0 +1 @@
|
||||
Here is the source for CP/NET-86. This is a disassembly, but is well commented.
|
||||
598
CP-NET/CPNET-86 SOURCE/SNIOS.A86
Normal file
598
CP-NET/CPNET-86 SOURCE/SNIOS.A86
Normal file
@@ -0,0 +1,598 @@
|
||||
; SLAVE NETWORK INPUT OUTPUT SYSTEM FOR CP/NET-86
|
||||
;
|
||||
; 1983.9.4. VER.1.00
|
||||
;
|
||||
BASE EQU 0 ;FOR RELOCATION
|
||||
;
|
||||
;
|
||||
TITLE 'SLAVE NETWORK INPUT OUTPUT SYSTEM FOR CP/NET-86'
|
||||
;
|
||||
; EQUATIONS OF SLAVE PROCESSOR ID CODE
|
||||
;
|
||||
SLVID EQU 10H
|
||||
;
|
||||
; EQUATIONS OF NETWORK STATUS BYTE
|
||||
;
|
||||
ACTIVE EQU 10H ;SLAVE LOGGED IN ON NETWORK
|
||||
RCVERR EQU 2H ;ERROR IN RECEIVED MESSAGE
|
||||
SNDERR EQU 1H ;UNABLE TO SEND MESSAGE
|
||||
;
|
||||
; EQUATIONS OF CODE & DATA
|
||||
;
|
||||
SOH EQU 01H ;START OF HEADER
|
||||
STX EQU 02H ;START OF DATA
|
||||
ETX EQU 03H ;END OF DATA
|
||||
EOT EQU 04H ;END OF TRANSMISSION
|
||||
ENQ EQU 05H ;ENQUIRE
|
||||
ACK EQU 06H ;ACKNOWLEDGE
|
||||
ACKS EQU 07H ;SECOND ACKNOWLEDGE
|
||||
LF EQU 0AH ;LINE FEED
|
||||
CR EQU 0DH ;CARRIAGRE RETURN
|
||||
NAK EQU 15H ;NEGATIVE ACKNOWLEDGE
|
||||
;
|
||||
CBUFPR EQU 9 ;PRINT BUFFER BDOS FUNCTION
|
||||
LOGIN EQU 64 ;LOGIN NDOS FUNCTION NUMBER
|
||||
;
|
||||
TMORTY EQU 100 ;TIME OUT RETRY COUNT
|
||||
MAXRTY EQU 10 ;SEND MESSAGE RETRY COUNT
|
||||
;
|
||||
; EQUATIONS OF INPUT OUTPUT PORT & ADDRESS
|
||||
;
|
||||
BDOS EQU 224 ;BDOS INTTERUPT
|
||||
;
|
||||
COMPRT EQU 0D0H ;COMMUNICATION PORT
|
||||
STATI EQU COMPRT ;INPUT STATUS
|
||||
DPRTI EQU COMPRT+2 ;DATA PORT
|
||||
MSKI EQU 01H ;INPUT READY BIT
|
||||
;
|
||||
STATO EQU COMPRT ;OUTPUT STATUS
|
||||
DPRTO EQU COMPRT+2 ;DATA PORT
|
||||
MSKO EQU 80H ;OUTPUT READY BIT
|
||||
;
|
||||
;
|
||||
CSEG
|
||||
ORG BASE
|
||||
;
|
||||
; JUMP VECTOR FOR SNIOS ENTRY POINTS
|
||||
;
|
||||
JMP NTWKIN ;NETWORK INITIALIZE
|
||||
JMP NTWKST ;NETWORK STATUS
|
||||
JMP CNTBAD ;RETURN CONFIGRATION TABLE ADDRESS
|
||||
JMP SNDMSG ;SEND MESSAGE
|
||||
JMP RCVMSG ;RECEIVE MESSAGE
|
||||
JMP NTRSET ;NETWORK ERROR RESET
|
||||
JMP NTWKWB ;NETWORK WARM BOOT
|
||||
JMP NTWKEN ;RETURN END ADDRESS
|
||||
;
|
||||
;
|
||||
PTABLE EQU $
|
||||
DSEG
|
||||
ORG OFFSET PTABLE
|
||||
;
|
||||
; SLAVE CONFIGRATION TABLE
|
||||
;
|
||||
CNFTBL DB 0 ;NETWORK STATUS BYTE
|
||||
DB SLVID ;SLAVE PROCESSOR ID
|
||||
DB 0,0 ;A: DISK DEVICE
|
||||
DB 0,0 ;B: DISK DEVICE
|
||||
DB 0,0 ;C: DISK DEVICE
|
||||
DB 0,0 ;D: DISK DEVICE
|
||||
DB 80H,0 ;E: A: OF MASTER 0
|
||||
DB 81H,0 ;F: B: OF MASTER 0
|
||||
DB 82H,0 ;G: C: OF MASTER 0
|
||||
DB 83H,0 ;H: D: OF MASTER 0
|
||||
DB 84H,0 ;I: E: OF MASTER 0
|
||||
DB 85H,0 ;J: F: OF MASTER 0
|
||||
DB 0,0 ;K: DISK DEVICE
|
||||
DB 0,0 ;L: DISK DEVICE
|
||||
DB 0,0 ;M: DISK DEVICE
|
||||
DB 0,0 ;N: DISK DEVICE
|
||||
DB 0,0 ;O: DISK DEVICE
|
||||
DB 0,0 ;P: DISK DEVICE
|
||||
;
|
||||
DB 0,0 ;CONSOLE DEVICE
|
||||
;
|
||||
DB 0,0 ;LIST DEVICE
|
||||
DB 0 ;BUFFER INDEX
|
||||
;
|
||||
CNFTBS DB 0 ;FMT MESSAGE BUFFER FOR LISTER
|
||||
DB 0 ;DID
|
||||
DB 0 ;SID
|
||||
DB 5 ;FNC LIST OUT
|
||||
DB 0 ;SIZ
|
||||
RS 1 ;MESSAGE 0 LISTER NUMBER
|
||||
RS 35 ;MESSAGE 1 - 128 OUTPUT DATA
|
||||
;
|
||||
; COMMENT DESTROYED BY LIST OUT TO NETWORK
|
||||
;
|
||||
CSTUP DB 'SNIOS OF CP/NET-86 VER.1.00 SLAVE ID = '
|
||||
CSTIDN DB '00',CR,LF,'$'
|
||||
;
|
||||
;
|
||||
MAINP EQU $
|
||||
CSEG
|
||||
ORG OFFSET MAINP
|
||||
;
|
||||
; SET SLAVE ID NUMBER
|
||||
;
|
||||
SETIDN:
|
||||
MOV BX,OFFSET CSTIDN
|
||||
MOV AL,CNFTBL+1 ;GET SLAVE ID
|
||||
MOV CL,AL
|
||||
ROR AL,1
|
||||
ROR AL,1
|
||||
ROR AL,1
|
||||
ROR AL,1
|
||||
CALL SETIDS ;SET UPER NIBBLE
|
||||
MOV AL,CL
|
||||
SETIDS:
|
||||
AND AL,0FH
|
||||
ADD AL,'0'
|
||||
CMP AL,'0'+10
|
||||
JC $+4 ;0 TO 9
|
||||
ADD AL,7 ;A TO F
|
||||
MOV [BX],AL
|
||||
INC BX
|
||||
RET
|
||||
;
|
||||
; INITIAL COMMENT OUT ROUTINE
|
||||
;
|
||||
INITCM:
|
||||
CALL SETIDN ;SET ID NUMBER
|
||||
MOV DX,OFFSET CSTUP
|
||||
MOV CL,CBUFPR
|
||||
INT BDOS ;OUT COMMENT
|
||||
XOR AL,AL
|
||||
MOV FINIT,AL
|
||||
RET ;ZERO IS SUCCESS END
|
||||
;
|
||||
; INITIALIZE NETWROK
|
||||
; OUTPUT
|
||||
; AL:0 OK
|
||||
;
|
||||
NTWKIN:
|
||||
MOV AL,CNFTBL+1 ;GET SLAVE PROCESSOR ID
|
||||
MOV CNFTBS+2,AL ;SAVE SID FOR LISTER
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
MOV AL,FINIT
|
||||
OR AL,AL
|
||||
JNZ INITCM ;OUT INITIAL COMMENT
|
||||
RET ;INITIALIZED
|
||||
;
|
||||
; OUTPUT STATUS OF NETWORK
|
||||
; OUTPUT
|
||||
; AL:STATUS
|
||||
;
|
||||
NTWKST:
|
||||
MOV AL,CNFTBL ;GET NETWORK STATUS
|
||||
MOV AH,AL
|
||||
AND AH,NOT (RCVERR+SNDERR)
|
||||
MOV CNFTBL,AH ;OFF ERROR BITS
|
||||
RET
|
||||
;
|
||||
; RETURN CONFIGRATION TABLE ADDRESS
|
||||
; OUTPUT
|
||||
; BX:CONFIGRATION TABLE POINT
|
||||
;
|
||||
CNTBAD:
|
||||
MOV BX,OFFSET CNFTBL
|
||||
RET
|
||||
;
|
||||
; SEND MESSAGE ON NETWORK
|
||||
; INPUT
|
||||
; CX:MESSAGE ADDRESS DS:SEGMENT
|
||||
;
|
||||
SNDMSG:
|
||||
MOV AX,DS
|
||||
MOV BP,CS
|
||||
MOV DS,BP ;SET DSEG TO NORMAL
|
||||
MOV MSGSEG,AX ;SAVCE SEGMENT
|
||||
MOV MSGADR,CX ;SAVE MESSAGE ADDRESS
|
||||
SNDMSR: ;RETRY LOOP
|
||||
MOV AL,MAXRTY
|
||||
MOV RTYCNT,AL ;INITIALIE RETRY COUNT
|
||||
SEND:
|
||||
CALL NTRSET ;RESET BUFFER
|
||||
SENDS:
|
||||
MOV ES,MSGSEG
|
||||
MOV DI,MSGADR ;GET MESSAGE TOP
|
||||
MOV DH,TMORTY ;TIME OUT RETRY COUNT
|
||||
SENDWT: ;ENQUIRE RESPONSE WAIT LOOP
|
||||
MOV DL,ENQ
|
||||
CALL CHROUT ;SEND ENQUIRE TO MASTER
|
||||
CALL CHARIN ;WAIT RESPONSE
|
||||
JNC SENDGT ;GET RESPONSE
|
||||
DEC DH ;TIME OVER
|
||||
JNZ SENDWT ;SEND ENQUIRE ONCE MORE
|
||||
JMP CHINTO ;TIME OVER FOR LINK
|
||||
;
|
||||
SENDGT: ;GET RESPONSE
|
||||
CMP AL,ENQ ;CHECK SEND - SEND MODE
|
||||
JZ SNDRCV ;CRASH SEND SO TO PASS RECEIVE MODE
|
||||
CALL GETAK0 ;GET RESPONSE OF ENQ
|
||||
MOV DL,SOH
|
||||
MOV CX,5 ;HEADER LENGTH COUNT
|
||||
CALL MSGOUT ;SEND SOH,FMT,DID,SID,FNC,SIZ
|
||||
XOR AL,AL
|
||||
SUB AL,DH
|
||||
MOV DL,AL
|
||||
CALL NETOUT ;SEND HCS (HEADER CHECK SUM)
|
||||
CALL CHARIW ;GET RESPONSE
|
||||
JC SENDOV ;TIME OVER
|
||||
CMP AL,ACK
|
||||
JNZ SENDGA ;NORMAL MODE
|
||||
CALL CHARIW ;MAYBE BUFFER LEFT ACK, SO IGNORE
|
||||
JC SENDOV ;TIME OVER
|
||||
SENDGA:
|
||||
SUB AL,ACKS
|
||||
JNZ SENDOV ;MISS MATCH OF RESPONSE
|
||||
DEC DI
|
||||
MOV CL,ES:[DI] ;GET LENGTH
|
||||
INC DI
|
||||
MOV CH,0
|
||||
INC CX
|
||||
MOV DL,STX
|
||||
CALL MSGOUT ;SEND STX,DB0,DB1,....
|
||||
MOV DL,ETX
|
||||
CALL NETOUT ;SEND ETX
|
||||
XOR AL,AL
|
||||
SUB AL,DH
|
||||
MOV DL,AL
|
||||
CALL NETOUT ;SEND DATA CHECK SUM
|
||||
MOV DL,EOT
|
||||
CALL CHROUT ;SEND END OF TRNASMISSION
|
||||
CALL GETAKS ;** NEED CALL ******* FOR ERROR RETRY
|
||||
RET
|
||||
;
|
||||
SENDOV: ;TIME OVER OR SO
|
||||
JMP GETATS
|
||||
;
|
||||
; PASS RECEIVE FOR SEND & SEND MODE
|
||||
;
|
||||
SNDRCV:
|
||||
CALL NTRSET ;CLEAR CURRENT BUFFER
|
||||
MOV DH,TMORTY
|
||||
SNDRCW: ;WAIT FOR ANOTHER ENQ
|
||||
CALL CHARIN
|
||||
JNB SNDRCG ;GET DATA
|
||||
DEC DH ;TIME OVER
|
||||
JNZ SNDRCW ;WAIT
|
||||
SNDRCS:
|
||||
JMP SEND ;MAYBE MISS LINK, SO TO SEND
|
||||
;
|
||||
SNDRCG: ;GET DATA
|
||||
CMP AL,ENQ
|
||||
JNZ SNDRCS ;MAYBE MISS LINK
|
||||
CALL SNDACK ;SEND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
JC SNDRCV ;NO RESPONSE, SO RETRY
|
||||
CMP AL,SOH
|
||||
JNZ SNDRCV
|
||||
MOV DI,OFFSET DHEADR ;DUMMY HEADER BUFFER
|
||||
MOV DH,AL
|
||||
MOV AX,DS
|
||||
MOV ES,AX
|
||||
MOV CX,5
|
||||
CALL MSGIN ;GET HEADER
|
||||
JC SNDRCV ;TIME OUT
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
JC SNDRCV ;TIME OUT RETRY
|
||||
JNZ SNDRCN ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW
|
||||
JC SNDRCV ;TIME OVER
|
||||
CMP AL,STX ;CHECK START OF TEXT
|
||||
JNZ SNDRCV ;MISS RETRY
|
||||
MOV DH,AL ;INITIALIZE CHECK SUM
|
||||
MOV CL,-1[DI]
|
||||
MOV CH,0
|
||||
INC CX
|
||||
INC CX ;GET COUNT FOR READ
|
||||
SNDRCL: ;DATA PASS RECEIVE LOOP
|
||||
CALL NETIN ;GET ONE DATA
|
||||
JC SNDRCV ;TIME OUT RETRY
|
||||
LOOP SNDRCL ;TO NEXT DATA
|
||||
CMP AL,ETX
|
||||
JNZ SNDRCV ;MISS MATCH OF END CODE
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
JC SNDRCV ;CHECK SUM ERROR
|
||||
CALL CHARIN
|
||||
JC SNDRCV ;TIME OVER
|
||||
CMP AL,EOT ;END OF TRANSMISSION
|
||||
JNZ SNDRCV ;END CODE ERROR
|
||||
OR DH,DH
|
||||
JNZ SNDRCN ;CHECK SUM ERROR
|
||||
CALL SNDAKS
|
||||
JMP SENDS ;RETURN TO SEND
|
||||
;
|
||||
SNDRCN: ;ERROR RESPONSE
|
||||
CALL SNDNAK
|
||||
JMP SNDRCV
|
||||
;
|
||||
; GET ACKNOWLEDGE
|
||||
; OVERRIDING RETURN WHEN ERROR
|
||||
;
|
||||
GETAK0: ;CHECK ACKNOWLEDGE
|
||||
SUB AL,ACK
|
||||
JNZ SNDRTY
|
||||
RET ;OK END
|
||||
;
|
||||
CHINTO: ;CHARACTER IN TIME OUT
|
||||
MOV AL,SNDERR
|
||||
CALL ERETRN
|
||||
JMP SNDMSR
|
||||
;
|
||||
GETAKS: ;GET SECOND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
JC SNDRTY ;TIME OUT
|
||||
SUB AL,ACKS
|
||||
JNZ SNDRTY
|
||||
RET ;OK
|
||||
;
|
||||
SNDRTY:
|
||||
POP BX ;DISCARD RETURN ADDRESS
|
||||
GETATS: ;TIME OVER RETRY
|
||||
DEC RTYCNT
|
||||
JZ CHINTO
|
||||
JMP SEND ;SEND AGAIN
|
||||
;
|
||||
; RECEIVE MESSAGE FROM NETWORK
|
||||
; INPUT
|
||||
; CX:MESSAGE ADDRESS DS:SEGMENT
|
||||
;
|
||||
RCVMSG:
|
||||
MOV AX,DS
|
||||
MOV BP,CS
|
||||
MOV DS,BP
|
||||
MOV MSGSEG,AX ;SAVE MESSAGE SEGMENT
|
||||
MOV MSGADR,CX ;SAVE MESSAGE ADDRESS
|
||||
RCVMSR:
|
||||
MOV AL,MAXRTY
|
||||
MOV RTYCNT,AL ;INITIALIZE RETRY COUNT
|
||||
RECALL:
|
||||
CALL RECEIV
|
||||
DEC RTYCNT ;DOWN RETRY COUNT
|
||||
JNZ RECALL ;RETRY
|
||||
RCVTOT: ;TIME OUT
|
||||
MOV AL,RCVERR
|
||||
CALL ERETRN
|
||||
JMPS RCVMSR
|
||||
;
|
||||
; RECEIVE BODDY
|
||||
; RETURN OVERRIDING WHEN OK
|
||||
; SIMPLE RETURN IS ERROR
|
||||
;
|
||||
RECEIV:
|
||||
MOV ES,MSGSEG
|
||||
MOV DI,MSGADR ;GET MESSAGE ADDRESS
|
||||
MOV DH,TMORTY ;TIME OUT RETRY
|
||||
CALL NTRSET ;RESET INPUT BUFFER
|
||||
RCVFST: ;RECEIVE FIRST CHARACTER LOOP
|
||||
CALL CHARIN
|
||||
JNC RCVGFS ;GET FIRST CHARACTER
|
||||
DEC DH ;TIME OVER
|
||||
JNZ RCVFST ;RETRY
|
||||
POP BX
|
||||
JMPS RCVTOT ;SET TIME OVER ERROR FLAG & RETRY
|
||||
;
|
||||
RCVGFS: ;GET FIRST CHARACTER
|
||||
CMP AL,ENQ
|
||||
JNZ RECEIV ;NOT ENQUIRE SO RETRY
|
||||
CALL SNDACK ;RESPONSE TO MASTER
|
||||
CALL CHARIW
|
||||
JC RECEIE ;RETURN TO RECEIVE RETRY
|
||||
CMP AL,SOH
|
||||
JNZ RECEIE ;NOT START OF HEADER
|
||||
MOV DH,AL ;START OF HEADER
|
||||
MOV CX,5 ;LENGTH OF HEADER
|
||||
CALL MSGIN ;GET HEADER BLOCK
|
||||
JC RECEIE ;TIME OVER
|
||||
CALL NETIN ;GET HCS (HEADER CHECK SUM)
|
||||
JC RECEIE ;TIME OVER RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW ;WAIT DATA TOP
|
||||
JC RECEIE ;TIME OVER
|
||||
CMP AL,STX
|
||||
JNZ RECEIE ;NOT START OF TEXT
|
||||
MOV DH,AL ;START OF TEXT
|
||||
DEC DI
|
||||
MOV CL,ES:[DI] ;GET SIZE
|
||||
INC DI
|
||||
MOV CH,0
|
||||
INC CX ;MAKE READ COUNT FOR DATA BLOCK
|
||||
CALL MSGIN ;RECEIVE DATA
|
||||
JC RECEIE ;TIME OVER
|
||||
CALL CHARIN ;GET END CODE OF DATA BLOCK
|
||||
JC RECEIE
|
||||
CMP AL,ETX
|
||||
JNZ RECEIE ;NOT END OF TEXT SO RETRY
|
||||
ADD DH,AL
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
JC RECEIE
|
||||
CALL CHARIN ;GET LAST CODE
|
||||
JC RECEIE
|
||||
CMP AL,EOT
|
||||
JNZ RECEIE ;NOT END OF TRANSMIT SO ERROR
|
||||
OR DH,DH
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
POP BX ;OK ALL PACKETTE IS RECEIVED
|
||||
MOV DI,MSGADR
|
||||
INC DI
|
||||
MOV AL,CNFTBL+1 ;GET SLAVE ID
|
||||
SUB AL,ES:[DI] ;CHECK SID
|
||||
JZ $+4
|
||||
MOV AL,-1 ;SID ERROR
|
||||
PUSH AX
|
||||
CALL SNDAKS ;SEND ACKNOWLEDGE
|
||||
POP AX
|
||||
RECEIE:
|
||||
RET
|
||||
;
|
||||
; ROUTINES TO SEND RESPONSE CODES
|
||||
;
|
||||
SNDACK: ;SEND ACKNOWLEDGE
|
||||
MOV DL,ACK
|
||||
JMPS CHROUT
|
||||
;
|
||||
SNDAKS: ;SEND SECOND ACKNOWLEDGE
|
||||
MOV DL,ACKS
|
||||
JMPS CHROUT
|
||||
;
|
||||
SNDNAK: ;SEND NEGATIVE ACKNOWLEDGE
|
||||
MOV DL,NAK
|
||||
JMPS CHROUT
|
||||
;
|
||||
; ERROR RETURN
|
||||
; INPUT
|
||||
; AL:ERROR BIT
|
||||
; OUTPUT
|
||||
; AL:-1
|
||||
;
|
||||
ERETRN:
|
||||
MOV BX,OFFSET CNFTBL
|
||||
OR [BX],AL ;ON ERROR BIT
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
MOV AL,-1 ;ERROR RETUNR CODE
|
||||
RET
|
||||
;
|
||||
; NETWORK ERROR RECOVER ROUTINE RESET COMMUNICATION INTERFACE
|
||||
;
|
||||
NTRSET:
|
||||
MOV AL,080H
|
||||
OUT STATO,AL ;RESET
|
||||
RET
|
||||
;
|
||||
; BOOTING UP ROUTINE
|
||||
;
|
||||
NTWKWB:
|
||||
JMPS NTRSET ;RESET INTERFACE
|
||||
;
|
||||
; RETURN END ADDRESS
|
||||
;
|
||||
NTWKEN:
|
||||
MOV BX,OFFSET BOTTOM
|
||||
RET
|
||||
;
|
||||
; NETWORK OUTPUT DATA
|
||||
; INPUT
|
||||
; DL:OUTPUT DATA
|
||||
; DH:CHECK SUM
|
||||
;
|
||||
NETOUT:
|
||||
ADD DH,DL ;MAKE CHECK SUM
|
||||
CHROUT:
|
||||
IN AL,STATO
|
||||
AND AL,MSKO ;GET OUTPUT READY MODE
|
||||
JNZ CHROUT ;NOT READY
|
||||
MOV AL,DL
|
||||
OUT DPRTO,AL ;OUT DATA
|
||||
RET
|
||||
;
|
||||
; INPUT FROM NETWORK
|
||||
; OUTPUT
|
||||
; AL:DATA
|
||||
; CF:ON TIME OVER OFF GET DATA
|
||||
;
|
||||
CHARIW: ;LONG WAIT
|
||||
MOV BH,0
|
||||
JMPS CHARIM
|
||||
;
|
||||
CHARIN:
|
||||
STI
|
||||
MOV BH,10 ;10 MS = 192 CH / 192K BAUD
|
||||
CHARIM: ;WAIT LOOP
|
||||
MOV BL,125 ;1 MS WAIT VALUE BY 5MHZ
|
||||
CHARIL: ;1 MS WAIT LOOP
|
||||
IN AL,STATI
|
||||
AND AL,MSKI
|
||||
JZ CHARIG ;READY
|
||||
DEC BL
|
||||
JNZ CHARIL ;WAIT OF 1 MS
|
||||
DEC BH
|
||||
JNZ CHARIM ;WAIT
|
||||
STC ;TIME OVER RETURN
|
||||
RET
|
||||
;
|
||||
CHARIG:
|
||||
IN AL,DPRTI ;GET DATA
|
||||
RET
|
||||
;
|
||||
; MESSAGE INPUT
|
||||
; INPUT
|
||||
; DI:DESTINATION ADDRESS ES:SEGMENT
|
||||
; CX:INPUT COUNT
|
||||
;
|
||||
MSGIN:
|
||||
CLI
|
||||
CLD
|
||||
MSGINL:
|
||||
IN AL,STATI
|
||||
AND AL,MSKI
|
||||
JZ MSGINS ;READY
|
||||
CALL CHARIN ;NOT READY SO WAIT
|
||||
JC MSGINE ;TIME OUT
|
||||
CLI
|
||||
JMPS MSGINS+2 ;GET DATA
|
||||
;
|
||||
MSGINS: ;READY
|
||||
IN AL,DPRTI ;GET DATA
|
||||
STOSB ;SAVE DATA
|
||||
ADD DH,AL ;MAKE HASH
|
||||
LOOP MSGINL ;TO NEXT BYTE
|
||||
OR AL,AL ;OFF CF
|
||||
MSGINE:
|
||||
STI
|
||||
RET
|
||||
;
|
||||
; NETWORK INPUT
|
||||
; INPUT
|
||||
; DH:CHECK SUM
|
||||
; OUTPUT
|
||||
; AL:DATA
|
||||
; CF:ON TIME OVER
|
||||
; ZF:ON HASH TOTAL IS ZERO
|
||||
;
|
||||
NETIN:
|
||||
CALL CHARIN ;RECEIVE BYTE IN BINARY MODE
|
||||
JC NETINE
|
||||
ADD DH,AL ;MAKE CHECK SUM
|
||||
OR DH,DH ;OFF CARRY FLAG
|
||||
NETINE:
|
||||
RET
|
||||
;
|
||||
; MESSAGE OUT
|
||||
; INPUT
|
||||
; DI:SOURCE ADDRESS
|
||||
; CX:COUNT OF OUTPUT DATA
|
||||
; DL:PREAMBLE CODE
|
||||
;
|
||||
MSGOUT:
|
||||
MOV DH,0 ;CLEAR CHECK SUM
|
||||
CALL NETOUT ;OUT PREAMBLE CODE
|
||||
MSGOTL: ;OUT LOOP
|
||||
MOV DL,ES:[DI] ;GET CODE
|
||||
INC DI
|
||||
CALL NETOUT ;OUT DATA
|
||||
LOOP MSGOTL ;TO NEXT DATA
|
||||
RET
|
||||
;
|
||||
;
|
||||
DTAREA EQU $
|
||||
DSEG
|
||||
ORG OFFSET DTAREA
|
||||
;
|
||||
; DATA AREA
|
||||
;
|
||||
FINIT DB -1 ;INITIAL MODE -1 INITIAL
|
||||
MSGADR DW 0 ;MESSAGE ADDRESS BUFFER
|
||||
MSGSEG DW 0 ;MESSAGE SEGMENT
|
||||
DHEADR RB 5 ;DUMMY HEADER BUFFER
|
||||
RTYCNT DB 0 ;RETRY COUNT
|
||||
;
|
||||
;
|
||||
BOTTOM: ;BOTTOM OF SNIOS
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
598
CP-NET/CPNET-86 SOURCE/SNIOSO.A86
Normal file
598
CP-NET/CPNET-86 SOURCE/SNIOSO.A86
Normal file
@@ -0,0 +1,598 @@
|
||||
; SLAVE NETWORK INPUT OUTPUT SYSTEM FOR CP/NET-86
|
||||
;
|
||||
; 1983.9.4. VER.1.00
|
||||
;
|
||||
BASE EQU 100H ;FOR RELOCATION
|
||||
;
|
||||
;
|
||||
TITLE 'SLAVE NETWORK INPUT OUTPUT SYSTEM FOR CP/NET-86'
|
||||
;
|
||||
; EQUATIONS OF SLAVE PROCESSOR ID CODE
|
||||
;
|
||||
SLVID EQU 10H
|
||||
;
|
||||
; EQUATIONS OF NETWORK STATUS BYTE
|
||||
;
|
||||
ACTIVE EQU 10H ;SLAVE LOGGED IN ON NETWORK
|
||||
RCVERR EQU 2H ;ERROR IN RECEIVED MESSAGE
|
||||
SNDERR EQU 1H ;UNABLE TO SEND MESSAGE
|
||||
;
|
||||
; EQUATIONS OF CODE & DATA
|
||||
;
|
||||
SOH EQU 01H ;START OF HEADER
|
||||
STX EQU 02H ;START OF DATA
|
||||
ETX EQU 03H ;END OF DATA
|
||||
EOT EQU 04H ;END OF TRANSMISSION
|
||||
ENQ EQU 05H ;ENQUIRE
|
||||
ACK EQU 06H ;ACKNOWLEDGE
|
||||
ACKS EQU 07H ;SECOND ACKNOWLEDGE
|
||||
LF EQU 0AH ;LINE FEED
|
||||
CR EQU 0DH ;CARRIAGRE RETURN
|
||||
NAK EQU 15H ;NEGATIVE ACKNOWLEDGE
|
||||
;
|
||||
CBUFPR EQU 9 ;PRINT BUFFER BDOS FUNCTION
|
||||
LOGIN EQU 64 ;LOGIN NDOS FUNCTION NUMBER
|
||||
;
|
||||
TMORTY EQU 100 ;TIME OUT RETRY COUNT
|
||||
MAXRTY EQU 10 ;SEND MESSAGE RETRY COUNT
|
||||
;
|
||||
; EQUATIONS OF INPUT OUTPUT PORT & ADDRESS
|
||||
;
|
||||
BDOS EQU 224 ;BDOS INTTERUPT
|
||||
;
|
||||
COMPRT EQU 0D0H ;COMMUNICATION PORT
|
||||
STATI EQU COMPRT ;INPUT STATUS
|
||||
DPRTI EQU COMPRT+2 ;DATA PORT
|
||||
MSKI EQU 01H ;INPUT READY BIT
|
||||
;
|
||||
STATO EQU COMPRT ;OUTPUT STATUS
|
||||
DPRTO EQU COMPRT+2 ;DATA PORT
|
||||
MSKO EQU 80H ;OUTPUT READY BIT
|
||||
;
|
||||
;
|
||||
CSEG
|
||||
ORG BASE
|
||||
;
|
||||
; JUMP VECTOR FOR SNIOS ENTRY POINTS
|
||||
;
|
||||
JMP NTWKIN ;NETWORK INITIALIZE
|
||||
JMP NTWKST ;NETWORK STATUS
|
||||
JMP CNTBAD ;RETURN CONFIGRATION TABLE ADDRESS
|
||||
JMP SNDMSG ;SEND MESSAGE
|
||||
JMP RCVMSG ;RECEIVE MESSAGE
|
||||
JMP NTRSET ;NETWORK ERROR RESET
|
||||
JMP NTWKWB ;NETWORK WARM BOOT
|
||||
JMP NTWKEN ;RETURN END ADDRESS
|
||||
;
|
||||
;
|
||||
PTABLE EQU $
|
||||
DSEG
|
||||
ORG OFFSET PTABLE
|
||||
;
|
||||
; SLAVE CONFIGRATION TABLE
|
||||
;
|
||||
CNFTBL DB 0 ;NETWORK STATUS BYTE
|
||||
DB SLVID ;SLAVE PROCESSOR ID
|
||||
DB 0,0 ;A: DISK DEVICE
|
||||
DB 0,0 ;B: DISK DEVICE
|
||||
DB 0,0 ;C: DISK DEVICE
|
||||
DB 0,0 ;D: DISK DEVICE
|
||||
DB 80H,0 ;E: A: OF MASTER 0
|
||||
DB 81H,0 ;F: B: OF MASTER 0
|
||||
DB 82H,0 ;G: C: OF MASTER 0
|
||||
DB 83H,0 ;H: D: OF MASTER 0
|
||||
DB 84H,0 ;I: E: OF MASTER 0
|
||||
DB 85H,0 ;J: F: OF MASTER 0
|
||||
DB 0,0 ;K: DISK DEVICE
|
||||
DB 0,0 ;L: DISK DEVICE
|
||||
DB 0,0 ;M: DISK DEVICE
|
||||
DB 0,0 ;N: DISK DEVICE
|
||||
DB 0,0 ;O: DISK DEVICE
|
||||
DB 0,0 ;P: DISK DEVICE
|
||||
;
|
||||
DB 0,0 ;CONSOLE DEVICE
|
||||
;
|
||||
DB 0,0 ;LIST DEVICE
|
||||
DB 0 ;BUFFER INDEX
|
||||
;
|
||||
CNFTBS DB 0 ;FMT MESSAGE BUFFER FOR LISTER
|
||||
DB 0 ;DID
|
||||
DB 0 ;SID
|
||||
DB 5 ;FNC LIST OUT
|
||||
DB 0 ;SIZ
|
||||
RS 1 ;MESSAGE 0 LISTER NUMBER
|
||||
RS 35 ;MESSAGE 1 - 128 OUTPUT DATA
|
||||
;
|
||||
; COMMENT DESTROYED BY LIST OUT TO NETWORK
|
||||
;
|
||||
CSTUP DB 'SNIOS OF CP/NET-86 XYZ VER.1.00 SLAVE ID = '
|
||||
CSTIDN DB '00',CR,LF,'$'
|
||||
;
|
||||
;
|
||||
MAINP EQU $
|
||||
CSEG
|
||||
ORG OFFSET MAINP
|
||||
;
|
||||
; SET SLAVE ID NUMBER
|
||||
;
|
||||
SETIDN:
|
||||
MOV BX,OFFSET CSTIDN
|
||||
MOV AL,CNFTBL+1 ;GET SLAVE ID
|
||||
MOV CL,AL
|
||||
ROR AL,1
|
||||
ROR AL,1
|
||||
ROR AL,1
|
||||
ROR AL,1
|
||||
CALL SETIDS ;SET UPER NIBBLE
|
||||
MOV AL,CL
|
||||
SETIDS:
|
||||
AND AL,0FH
|
||||
ADD AL,'0'
|
||||
CMP AL,'0'+10
|
||||
JC $+4 ;0 TO 9
|
||||
ADD AL,7 ;A TO F
|
||||
MOV [BX],AL
|
||||
INC BX
|
||||
RET
|
||||
;
|
||||
; INITIAL COMMENT OUT ROUTINE
|
||||
;
|
||||
INITCM:
|
||||
CALL SETIDN ;SET ID NUMBER
|
||||
MOV DX,OFFSET CSTUP
|
||||
MOV CL,CBUFPR
|
||||
INT BDOS ;OUT COMMENT
|
||||
XOR AL,AL
|
||||
MOV FINIT,AL
|
||||
RET ;ZERO IS SUCCESS END
|
||||
;
|
||||
; INITIALIZE NETWROK
|
||||
; OUTPUT
|
||||
; AL:0 OK
|
||||
;
|
||||
NTWKIN:
|
||||
MOV AL,CNFTBL+1 ;GET SLAVE PROCESSOR ID
|
||||
MOV CNFTBS+2,AL ;SAVE SID FOR LISTER
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
MOV AL,FINIT
|
||||
OR AL,AL
|
||||
JNZ INITCM ;OUT INITIAL COMMENT
|
||||
RET ;INITIALIZED
|
||||
;
|
||||
; OUTPUT STATUS OF NETWORK
|
||||
; OUTPUT
|
||||
; AL:STATUS
|
||||
;
|
||||
NTWKST:
|
||||
MOV AL,CNFTBL ;GET NETWORK STATUS
|
||||
MOV AH,AL
|
||||
AND AH,NOT (RCVERR+SNDERR)
|
||||
MOV CNFTBL,AH ;OFF ERROR BITS
|
||||
RET
|
||||
;
|
||||
; RETURN CONFIGRATION TABLE ADDRESS
|
||||
; OUTPUT
|
||||
; BX:CONFIGRATION TABLE POINT
|
||||
;
|
||||
CNTBAD:
|
||||
MOV BX,OFFSET CNFTBL
|
||||
RET
|
||||
;
|
||||
; SEND MESSAGE ON NETWORK
|
||||
; INPUT
|
||||
; CX:MESSAGE ADDRESS DS:SEGMENT
|
||||
;
|
||||
SNDMSG:
|
||||
MOV AX,DS
|
||||
MOV BP,CS
|
||||
MOV DS,BP ;SET DSEG TO NORMAL
|
||||
MOV MSGSEG,AX ;SAVCE SEGMENT
|
||||
MOV MSGADR,CX ;SAVE MESSAGE ADDRESS
|
||||
SNDMSR: ;RETRY LOOP
|
||||
MOV AL,MAXRTY
|
||||
MOV RTYCNT,AL ;INITIALIE RETRY COUNT
|
||||
SEND:
|
||||
CALL NTRSET ;RESET BUFFER
|
||||
SENDS:
|
||||
MOV ES,MSGSEG
|
||||
MOV DI,MSGADR ;GET MESSAGE TOP
|
||||
MOV DH,TMORTY ;TIME OUT RETRY COUNT
|
||||
SENDWT: ;ENQUIRE RESPONSE WAIT LOOP
|
||||
MOV DL,ENQ
|
||||
CALL CHROUT ;SEND ENQUIRE TO MASTER
|
||||
CALL CHARIN ;WAIT RESPONSE
|
||||
JNC SENDGT ;GET RESPONSE
|
||||
DEC DH ;TIME OVER
|
||||
JNZ SENDWT ;SEND ENQUIRE ONCE MORE
|
||||
JMP CHINTO ;TIME OVER FOR LINK
|
||||
;
|
||||
SENDGT: ;GET RESPONSE
|
||||
CMP AL,ENQ ;CHECK SEND - SEND MODE
|
||||
JZ SNDRCV ;CRASH SEND SO TO PASS RECEIVE MODE
|
||||
CALL GETAK0 ;GET RESPONSE OF ENQ
|
||||
MOV DL,SOH
|
||||
MOV CX,5 ;HEADER LENGTH COUNT
|
||||
CALL MSGOUT ;SEND SOH,FMT,DID,SID,FNC,SIZ
|
||||
XOR AL,AL
|
||||
SUB AL,DH
|
||||
MOV DL,AL
|
||||
CALL NETOUT ;SEND HCS (HEADER CHECK SUM)
|
||||
CALL CHARIW ;GET RESPONSE
|
||||
JC SENDOV ;TIME OVER
|
||||
CMP AL,ACK
|
||||
JNZ SENDGA ;NORMAL MODE
|
||||
CALL CHARIW ;MAYBE BUFFER LEFT ACK, SO IGNORE
|
||||
JC SENDOV ;TIME OVER
|
||||
SENDGA:
|
||||
SUB AL,ACKS
|
||||
JNZ SENDOV ;MISS MATCH OF RESPONSE
|
||||
DEC DI
|
||||
MOV CL,ES:[DI] ;GET LENGTH
|
||||
INC DI
|
||||
MOV CH,0
|
||||
INC CX
|
||||
MOV DL,STX
|
||||
CALL MSGOUT ;SEND STX,DB0,DB1,....
|
||||
MOV DL,ETX
|
||||
CALL NETOUT ;SEND ETX
|
||||
XOR AL,AL
|
||||
SUB AL,DH
|
||||
MOV DL,AL
|
||||
CALL NETOUT ;SEND DATA CHECK SUM
|
||||
MOV DL,EOT
|
||||
CALL CHROUT ;SEND END OF TRNASMISSION
|
||||
CALL GETAKS ;** NEED CALL ******* FOR ERROR RETRY
|
||||
RET
|
||||
;
|
||||
SENDOV: ;TIME OVER OR SO
|
||||
JMP GETATS
|
||||
;
|
||||
; PASS RECEIVE FOR SEND & SEND MODE
|
||||
;
|
||||
SNDRCV:
|
||||
CALL NTRSET ;CLEAR CURRENT BUFFER
|
||||
MOV DH,TMORTY
|
||||
SNDRCW: ;WAIT FOR ANOTHER ENQ
|
||||
CALL CHARIN
|
||||
JNB SNDRCG ;GET DATA
|
||||
DEC DH ;TIME OVER
|
||||
JNZ SNDRCW ;WAIT
|
||||
SNDRCS:
|
||||
JMP SEND ;MAYBE MISS LINK, SO TO SEND
|
||||
;
|
||||
SNDRCG: ;GET DATA
|
||||
CMP AL,ENQ
|
||||
JNZ SNDRCS ;MAYBE MISS LINK
|
||||
CALL SNDACK ;SEND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
JC SNDRCV ;NO RESPONSE, SO RETRY
|
||||
CMP AL,SOH
|
||||
JNZ SNDRCV
|
||||
MOV DI,OFFSET DHEADR ;DUMMY HEADER BUFFER
|
||||
MOV DH,AL
|
||||
MOV AX,DS
|
||||
MOV ES,AX
|
||||
MOV CX,5
|
||||
CALL MSGIN ;GET HEADER
|
||||
JC SNDRCV ;TIME OUT
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
JC SNDRCV ;TIME OUT RETRY
|
||||
JNZ SNDRCN ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW
|
||||
JC SNDRCV ;TIME OVER
|
||||
CMP AL,STX ;CHECK START OF TEXT
|
||||
JNZ SNDRCV ;MISS RETRY
|
||||
MOV DH,AL ;INITIALIZE CHECK SUM
|
||||
MOV CL,-1[DI]
|
||||
MOV CH,0
|
||||
INC CX
|
||||
INC CX ;GET COUNT FOR READ
|
||||
SNDRCL: ;DATA PASS RECEIVE LOOP
|
||||
CALL NETIN ;GET ONE DATA
|
||||
JC SNDRCV ;TIME OUT RETRY
|
||||
LOOP SNDRCL ;TO NEXT DATA
|
||||
CMP AL,ETX
|
||||
JNZ SNDRCV ;MISS MATCH OF END CODE
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
JC SNDRCV ;CHECK SUM ERROR
|
||||
CALL CHARIN
|
||||
JC SNDRCV ;TIME OVER
|
||||
CMP AL,EOT ;END OF TRANSMISSION
|
||||
JNZ SNDRCV ;END CODE ERROR
|
||||
OR DH,DH
|
||||
JNZ SNDRCN ;CHECK SUM ERROR
|
||||
CALL SNDAKS
|
||||
JMP SENDS ;RETURN TO SEND
|
||||
;
|
||||
SNDRCN: ;ERROR RESPONSE
|
||||
CALL SNDNAK
|
||||
JMP SNDRCV
|
||||
;
|
||||
; GET ACKNOWLEDGE
|
||||
; OVERRIDING RETURN WHEN ERROR
|
||||
;
|
||||
GETAK0: ;CHECK ACKNOWLEDGE
|
||||
SUB AL,ACK
|
||||
JNZ SNDRTY
|
||||
RET ;OK END
|
||||
;
|
||||
CHINTO: ;CHARACTER IN TIME OUT
|
||||
MOV AL,SNDERR
|
||||
CALL ERETRN
|
||||
JMP SNDMSR
|
||||
;
|
||||
GETAKS: ;GET SECOND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
JC SNDRTY ;TIME OUT
|
||||
SUB AL,ACKS
|
||||
JNZ SNDRTY
|
||||
RET ;OK
|
||||
;
|
||||
SNDRTY:
|
||||
POP BX ;DISCARD RETURN ADDRESS
|
||||
GETATS: ;TIME OVER RETRY
|
||||
DEC RTYCNT
|
||||
JZ CHINTO
|
||||
JMP SEND ;SEND AGAIN
|
||||
;
|
||||
; RECEIVE MESSAGE FROM NETWORK
|
||||
; INPUT
|
||||
; CX:MESSAGE ADDRESS DS:SEGMENT
|
||||
;
|
||||
RCVMSG:
|
||||
MOV AX,DS
|
||||
MOV BP,CS
|
||||
MOV DS,BP
|
||||
MOV MSGSEG,AX ;SAVE MESSAGE SEGMENT
|
||||
MOV MSGADR,CX ;SAVE MESSAGE ADDRESS
|
||||
RCVMSR:
|
||||
MOV AL,MAXRTY
|
||||
MOV RTYCNT,AL ;INITIALIZE RETRY COUNT
|
||||
RECALL:
|
||||
CALL RECEIV
|
||||
DEC RTYCNT ;DOWN RETRY COUNT
|
||||
JNZ RECALL ;RETRY
|
||||
RCVTOT: ;TIME OUT
|
||||
MOV AL,RCVERR
|
||||
CALL ERETRN
|
||||
JMPS RCVMSR
|
||||
;
|
||||
; RECEIVE BODDY
|
||||
; RETURN OVERRIDING WHEN OK
|
||||
; SIMPLE RETURN IS ERROR
|
||||
;
|
||||
RECEIV:
|
||||
MOV ES,MSGSEG
|
||||
MOV DI,MSGADR ;GET MESSAGE ADDRESS
|
||||
MOV DH,TMORTY ;TIME OUT RETRY
|
||||
CALL NTRSET ;RESET INPUT BUFFER
|
||||
RCVFST: ;RECEIVE FIRST CHARACTER LOOP
|
||||
CALL CHARIN
|
||||
JNC RCVGFS ;GET FIRST CHARACTER
|
||||
DEC DH ;TIME OVER
|
||||
JNZ RCVFST ;RETRY
|
||||
POP BX
|
||||
JMPS RCVTOT ;SET TIME OVER ERROR FLAG & RETRY
|
||||
;
|
||||
RCVGFS: ;GET FIRST CHARACTER
|
||||
CMP AL,ENQ
|
||||
JNZ RECEIV ;NOT ENQUIRE SO RETRY
|
||||
CALL SNDACK ;RESPONSE TO MASTER
|
||||
CALL CHARIW
|
||||
JC RECEIE ;RETURN TO RECEIVE RETRY
|
||||
CMP AL,SOH
|
||||
JNZ RECEIE ;NOT START OF HEADER
|
||||
MOV DH,AL ;START OF HEADER
|
||||
MOV CX,5 ;LENGTH OF HEADER
|
||||
CALL MSGIN ;GET HEADER BLOCK
|
||||
JC RECEIE ;TIME OVER
|
||||
CALL NETIN ;GET HCS (HEADER CHECK SUM)
|
||||
JC RECEIE ;TIME OVER RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW ;WAIT DATA TOP
|
||||
JC RECEIE ;TIME OVER
|
||||
CMP AL,STX
|
||||
JNZ RECEIE ;NOT START OF TEXT
|
||||
MOV DH,AL ;START OF TEXT
|
||||
DEC DI
|
||||
MOV CL,ES:[DI] ;GET SIZE
|
||||
INC DI
|
||||
MOV CH,0
|
||||
INC CX ;MAKE READ COUNT FOR DATA BLOCK
|
||||
CALL MSGIN ;RECEIVE DATA
|
||||
JC RECEIE ;TIME OVER
|
||||
CALL CHARIN ;GET END CODE OF DATA BLOCK
|
||||
JC RECEIE
|
||||
CMP AL,ETX
|
||||
JNZ RECEIE ;NOT END OF TEXT SO RETRY
|
||||
ADD DH,AL
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
JC RECEIE
|
||||
CALL CHARIN ;GET LAST CODE
|
||||
JC RECEIE
|
||||
CMP AL,EOT
|
||||
JNZ RECEIE ;NOT END OF TRANSMIT SO ERROR
|
||||
OR DH,DH
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
POP BX ;OK ALL PACKETTE IS RECEIVED
|
||||
MOV DI,MSGADR
|
||||
INC DI
|
||||
MOV AL,CNFTBL+1 ;GET SLAVE ID
|
||||
SUB AL,ES:[DI] ;CHECK SID
|
||||
JZ $+4
|
||||
MOV AL,-1 ;SID ERROR
|
||||
PUSH AX
|
||||
CALL SNDAKS ;SEND ACKNOWLEDGE
|
||||
POP AX
|
||||
RECEIE:
|
||||
RET
|
||||
;
|
||||
; ROUTINES TO SEND RESPONSE CODES
|
||||
;
|
||||
SNDACK: ;SEND ACKNOWLEDGE
|
||||
MOV DL,ACK
|
||||
JMPS CHROUT
|
||||
;
|
||||
SNDAKS: ;SEND SECOND ACKNOWLEDGE
|
||||
MOV DL,ACKS
|
||||
JMPS CHROUT
|
||||
;
|
||||
SNDNAK: ;SEND NEGATIVE ACKNOWLEDGE
|
||||
MOV DL,NAK
|
||||
JMPS CHROUT
|
||||
;
|
||||
; ERROR RETURN
|
||||
; INPUT
|
||||
; AL:ERROR BIT
|
||||
; OUTPUT
|
||||
; AL:-1
|
||||
;
|
||||
ERETRN:
|
||||
MOV BX,OFFSET CNFTBL
|
||||
OR [BX],AL ;ON ERROR BIT
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
MOV AL,-1 ;ERROR RETUNR CODE
|
||||
RET
|
||||
;
|
||||
; NETWORK ERROR RECOVER ROUTINE RESET COMMUNICATION INTERFACE
|
||||
;
|
||||
NTRSET:
|
||||
MOV AL,080H
|
||||
OUT STATO,AL ;RESET
|
||||
RET
|
||||
;
|
||||
; BOOTING UP ROUTINE
|
||||
;
|
||||
NTWKWB:
|
||||
JMPS NTRSET ;RESET INTERFACE
|
||||
;
|
||||
; RETURN END ADDRESS
|
||||
;
|
||||
NTWKEN:
|
||||
MOV BX,OFFSET BOTTOM
|
||||
RET
|
||||
;
|
||||
; NETWORK OUTPUT DATA
|
||||
; INPUT
|
||||
; DL:OUTPUT DATA
|
||||
; DH:CHECK SUM
|
||||
;
|
||||
NETOUT:
|
||||
ADD DH,DL ;MAKE CHECK SUM
|
||||
CHROUT:
|
||||
IN AL,STATO
|
||||
AND AL,MSKO ;GET OUTPUT READY MODE
|
||||
JNZ CHROUT ;NOT READY
|
||||
MOV AL,DL
|
||||
OUT DPRTO,AL ;OUT DATA
|
||||
RET
|
||||
;
|
||||
; INPUT FROM NETWORK
|
||||
; OUTPUT
|
||||
; AL:DATA
|
||||
; CF:ON TIME OVER OFF GET DATA
|
||||
;
|
||||
CHARIW: ;LONG WAIT
|
||||
MOV BH,0
|
||||
JMPS CHARIM
|
||||
;
|
||||
CHARIN:
|
||||
STI
|
||||
MOV BH,10 ;10 MS = 192 CH / 192K BAUD
|
||||
CHARIM: ;WAIT LOOP
|
||||
MOV BL,125 ;1 MS WAIT VALUE BY 5MHZ
|
||||
CHARIL: ;1 MS WAIT LOOP
|
||||
IN AL,STATI
|
||||
AND AL,MSKI
|
||||
JZ CHARIG ;READY
|
||||
DEC BL
|
||||
JNZ CHARIL ;WAIT OF 1 MS
|
||||
DEC BH
|
||||
JNZ CHARIM ;WAIT
|
||||
STC ;TIME OVER RETURN
|
||||
RET
|
||||
;
|
||||
CHARIG:
|
||||
IN AL,DPRTI ;GET DATA
|
||||
RET
|
||||
;
|
||||
; MESSAGE INPUT
|
||||
; INPUT
|
||||
; DI:DESTINATION ADDRESS ES:SEGMENT
|
||||
; CX:INPUT COUNT
|
||||
;
|
||||
MSGIN:
|
||||
CLI
|
||||
CLD
|
||||
MSGINL:
|
||||
IN AL,STATI
|
||||
AND AL,MSKI
|
||||
JZ MSGINS ;READY
|
||||
CALL CHARIN ;NOT READY SO WAIT
|
||||
JC MSGINE ;TIME OUT
|
||||
CLI
|
||||
JMPS MSGINS+2 ;GET DATA
|
||||
;
|
||||
MSGINS: ;READY
|
||||
IN AL,DPRTI ;GET DATA
|
||||
STOSB ;SAVE DATA
|
||||
ADD DH,AL ;MAKE HASH
|
||||
LOOP MSGINL ;TO NEXT BYTE
|
||||
OR AL,AL ;OFF CF
|
||||
MSGINE:
|
||||
STI
|
||||
RET
|
||||
;
|
||||
; NETWORK INPUT
|
||||
; INPUT
|
||||
; DH:CHECK SUM
|
||||
; OUTPUT
|
||||
; AL:DATA
|
||||
; CF:ON TIME OVER
|
||||
; ZF:ON HASH TOTAL IS ZERO
|
||||
;
|
||||
NETIN:
|
||||
CALL CHARIN ;RECEIVE BYTE IN BINARY MODE
|
||||
JC NETINE
|
||||
ADD DH,AL ;MAKE CHECK SUM
|
||||
OR DH,DH ;OFF CARRY FLAG
|
||||
NETINE:
|
||||
RET
|
||||
;
|
||||
; MESSAGE OUT
|
||||
; INPUT
|
||||
; DI:SOURCE ADDRESS
|
||||
; CX:COUNT OF OUTPUT DATA
|
||||
; DL:PREAMBLE CODE
|
||||
;
|
||||
MSGOUT:
|
||||
MOV DH,0 ;CLEAR CHECK SUM
|
||||
CALL NETOUT ;OUT PREAMBLE CODE
|
||||
MSGOTL: ;OUT LOOP
|
||||
MOV DL,ES:[DI] ;GET CODE
|
||||
INC DI
|
||||
CALL NETOUT ;OUT DATA
|
||||
LOOP MSGOTL ;TO NEXT DATA
|
||||
RET
|
||||
;
|
||||
;
|
||||
DTAREA EQU $
|
||||
DSEG
|
||||
ORG OFFSET DTAREA
|
||||
;
|
||||
; DATA AREA
|
||||
;
|
||||
FINIT DB -1 ;INITIAL MODE -1 INITIAL
|
||||
MSGADR DW 0 ;MESSAGE ADDRESS BUFFER
|
||||
MSGSEG DW 0 ;MESSAGE SEGMENT
|
||||
DHEADR RB 5 ;DUMMY HEADER BUFFER
|
||||
RTYCNT DB 0 ;RETRY COUNT
|
||||
;
|
||||
;
|
||||
BOTTOM: ;BOTTOM OF SNIOS
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user