mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 08:54:17 +00:00
Upload
Digital Research
This commit is contained in:
808
CP-NET/CPNET-80 SOURCE/CPNETLDR.MAC
Normal file
808
CP-NET/CPNET-80 SOURCE/CPNETLDR.MAC
Normal file
@@ -0,0 +1,808 @@
|
||||
; CP/NET LOADER FOR CP/NET VER. 1.0
|
||||
;
|
||||
; 1982.8.6. BASE
|
||||
;
|
||||
TITLE CP/NET LOADER VER.1.0
|
||||
;
|
||||
; EQUATIONS OF DATA
|
||||
;
|
||||
LF EQU 0AH ;LINE FEED
|
||||
CR EQU 0DH ;CARRIAGE RETURN
|
||||
;
|
||||
TOP EQU 0 ;MEMORY TOP
|
||||
BDOS EQU 5 ;BDOS ENTRY
|
||||
RESFCB EQU 5CH ;RESIDENT FCB
|
||||
SCTLNG EQU 128 ;SECTOR LENGTH
|
||||
;
|
||||
; 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 ADDRESS
|
||||
;
|
||||
; START
|
||||
;
|
||||
JMP START
|
||||
;
|
||||
; BREAK POINT RESTART NUMBER FOR DEBUG
|
||||
;
|
||||
BPNUM: DB 7
|
||||
;
|
||||
; COMMENTS
|
||||
;
|
||||
DB 'COPYRIGHT (C) 1980,'
|
||||
;
|
||||
PUSRID: DB ' DIGITAL RESEARCH ' ;USER ID IS SEARCHED BY THIS STRING
|
||||
;
|
||||
; USER ID CODE
|
||||
;
|
||||
DB 0,0,0,0,0,0
|
||||
;
|
||||
CDSKER: DB 'Disk read error$'
|
||||
;
|
||||
PDEBBP: DW DEBBP ;POINTER OF DEBUGGER BREAK POINT ROUTINE
|
||||
;
|
||||
CSYNC: DB 'Synchronization$'
|
||||
CARLOD: DB CR,LF,'CP/Net is already loaded.$'
|
||||
CSTUP: DB CR,LF,LF,'CP/NET 1.0 Loader'
|
||||
DB CR,LF,'=================',CR,LF,LF,'$'
|
||||
;
|
||||
CBIOS: DB 'BIOS $'
|
||||
CBDOS: DB 'BDOS $'
|
||||
CSNIOS: DB 'SNIOS SPR$'
|
||||
CNDOS: DB 'NDOS SPR$'
|
||||
CTPA: DB 'TPA $'
|
||||
;
|
||||
CLEND: DB 'CP/NET 1.0 loading complete.$'
|
||||
CLERR: DB CR,LF,'CP/NET Loader error: $'
|
||||
;
|
||||
; START OF MAIN
|
||||
;
|
||||
LXI SP,PFLNAM
|
||||
START:
|
||||
LXI H,STACK
|
||||
SPHL ;SET STACK POINTER
|
||||
LXI D,0
|
||||
MVI C,CGETVR ;GET VERSION NUMBER
|
||||
CALL BDOS
|
||||
LXI D,200H
|
||||
CALL ANHLDE ;GET CP/NET MODE
|
||||
MVI A,0
|
||||
CALL SUBYHL ;CHECK ZERO
|
||||
ORA L
|
||||
JZ STARTS ;CP/NET IS NOT LOADED OK
|
||||
LXI B,CARLOD ;CP/NET ALREADY LOADED
|
||||
CALL BUFPRN
|
||||
LXI D,0
|
||||
MVI C,CRESET
|
||||
CALL BDOS ;RETURN TO SYSTEM
|
||||
;
|
||||
STARTS:
|
||||
LHLD BDOSPT ;GET POINT OF BDOS POINTER
|
||||
LXI D,0FF00H
|
||||
CALL ANHMDE ;OFF LOWER BYTE
|
||||
SHLD FREBOT ;SAVE AVAILABLE AREA TOP
|
||||
LDA RESFCB+1 ;GET DEBUG MODE
|
||||
STA FDEBUG
|
||||
LXI B,CSTUP
|
||||
CALL BUFPRN ;START UP COMMENT
|
||||
;
|
||||
LXI B,CBIOS ;BIOS
|
||||
CALL BUFPRN
|
||||
LXI H,TOP+1
|
||||
SHLD BDOSPT ;SET POINTER OF BIOS ROUTINE POINTER
|
||||
LHLD BDOSPT
|
||||
MOV C,M
|
||||
INX H
|
||||
MOV B,M ;GET BIOS POINT
|
||||
DCX B
|
||||
DCX B
|
||||
DCX B
|
||||
CALL LOCPR ;PRINT BIOS TOP
|
||||
LHLD BDOSPT
|
||||
LXI D,-1
|
||||
CALL SUDEHM ;GET COMPLEMET OF BIOS POINT VALUE
|
||||
LXI D,4 ;GET BIAS
|
||||
DAD D
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;PRINT BIOS LENGTH
|
||||
CALL CRLF
|
||||
;
|
||||
LXI B,CBDOS ;BDOS
|
||||
CALL BUFPRN
|
||||
LHLD FREBOT ;GET BDOS TOP
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;PRINT BDOS TOP
|
||||
LHLD BDOSPT
|
||||
MOV C,M
|
||||
INX H
|
||||
MOV B,M
|
||||
DCX B
|
||||
DCX B
|
||||
DCX B ;BIOS TOP
|
||||
MOV D,B
|
||||
MOV E,C
|
||||
LHLD FREBOT
|
||||
CALL SUDEHL ;GET BDOS LENGTH
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;PRINT BDOS LENGTH
|
||||
CALL CRLF
|
||||
;
|
||||
LXI H,CSNIOS ;SNIOS.SPR
|
||||
SHLD PFLNAM ;SET FILE NAME POINT FOR ERROR ROUTINE
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL BUFPRN
|
||||
LHLD FREBOT ;GET LOADING POINT
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
LXI D,FSNIOS ;FCB POINT OF SNIOS.SPR
|
||||
CALL LOAD ;LOAD SNIOS.SPR
|
||||
SHLD TOPPNT ;SAVE SNIOS TOP
|
||||
LXI D,-1
|
||||
CALL SUDEHL ;CHECK ERROR
|
||||
ORA L
|
||||
JNZ $+6 ;NOT ERROR
|
||||
JMP ERROR ;SNIOS.SPR LOAD ERROR
|
||||
;
|
||||
LHLD TOPPNT
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;PRINT SNIOS TOP
|
||||
LXI B,TOPPNT
|
||||
LXI D,FREBOT
|
||||
CALL SUDMBM ;GET SNIOS LENGTH
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;PRINT SNIOS LENGTH
|
||||
CALL CRLF
|
||||
LHLD TOPPNT ;SET SNIOS TOP AS THE BOTTOM OF NDOS
|
||||
SHLD FREBOT
|
||||
;
|
||||
LXI H,CNDOS ;NDOS.SPR
|
||||
SHLD PFLNAM
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL BUFPRN
|
||||
LHLD FREBOT ;GET LOADING POINT
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
LXI D,FNDOS ;GET FCB POINT
|
||||
CALL LOAD ;LOAD NDOS.SPR
|
||||
SHLD TOPPNT
|
||||
LXI D,-1
|
||||
CALL SUDEHL ;CHECK LOAD ERROR
|
||||
ORA L
|
||||
JNZ $+6 ;NOT ERROR
|
||||
JMP ERROR ;NDOS.SPR LOADING ERROR
|
||||
;
|
||||
LHLD TOPPNT
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;PRINT NDOS TOP
|
||||
LXI B,TOPPNT
|
||||
LXI D,FREBOT
|
||||
CALL SUDMBM ;GET LENGTH
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;PRINT LENGTH
|
||||
CALL CRLF
|
||||
LHLD TOPPNT
|
||||
INX H
|
||||
INX H
|
||||
INX H
|
||||
SHLD PNDOSC ;SAVE NDOS COLD START ROUTINE POINTER
|
||||
;
|
||||
LXI B,CTPA ;TPA
|
||||
CALL BUFPRN
|
||||
LXI B,TOP
|
||||
CALL LOCPR ;TOP OF TPA
|
||||
LHLD TOPPNT
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL LOCPR ;LENGTH IS NDOS TOP
|
||||
CALL CRLF
|
||||
LHLD PNDOSC
|
||||
INX H
|
||||
INX H
|
||||
INX H
|
||||
XCHG
|
||||
LXI B,PUSRID
|
||||
CALL CHKUSC ;CHECK USER ID CODE
|
||||
CALL CRLF
|
||||
LXI B,CLEND
|
||||
CALL BUFPRN ;PRINT LOADING END COMMENT
|
||||
CALL CRLF
|
||||
CALL GOTDOS ;TO NDOS OR BREAK
|
||||
;
|
||||
; ERROR ROUTINE
|
||||
;
|
||||
ERROR:
|
||||
LXI SP,PFLNAM
|
||||
LXI B,CLERR
|
||||
CALL BUFPRN ;LOADER ERROR
|
||||
LHLD PFLNAM ;GET ERROR DATA COMMENT POINT
|
||||
MOV B,H
|
||||
MOV C,L
|
||||
CALL BUFPRN ;PRINT ERROR DATA
|
||||
ERSTOP:
|
||||
MVI A,-1
|
||||
RAR
|
||||
JNC ERSTOS
|
||||
LXI H,TOP
|
||||
SPHL
|
||||
DI
|
||||
EI
|
||||
HLT
|
||||
JMP ERSTOP
|
||||
;
|
||||
ERSTOS:
|
||||
EI
|
||||
HLT
|
||||
;
|
||||
; CONSOLE OUT
|
||||
; INPUT
|
||||
; C:DATA
|
||||
;
|
||||
CONOT:
|
||||
LXI H,WCONOT
|
||||
MOV M,C
|
||||
LHLD WCONOT
|
||||
MVI H,0
|
||||
XCHG
|
||||
MVI C,002H
|
||||
CALL BDOS
|
||||
RET
|
||||
;
|
||||
; BUFFER PRINT
|
||||
; INPUT
|
||||
; BC:STRING POINT
|
||||
;
|
||||
BUFPRN:
|
||||
LXI H,WBUFPR+1
|
||||
MOV M,B
|
||||
DCX H
|
||||
MOV M,C ;SAVE PARAMETER
|
||||
LHLD WBUFPR
|
||||
XCHG
|
||||
MVI C,CBUFPR
|
||||
CALL BDOS
|
||||
RET
|
||||
;
|
||||
; OPEN FILE NOT USED
|
||||
; INPUT
|
||||
; BC:FCB POINT
|
||||
;
|
||||
LXI H,WOPEN+1
|
||||
MOV M,B
|
||||
DCX H
|
||||
MOV M,C
|
||||
LHLD WOPEN
|
||||
XCHG
|
||||
MVI C,COPEN
|
||||
CALL BDOS
|
||||
RET
|
||||
;
|
||||
; READ SEQUENTIAL NOT USED
|
||||
; INPUT
|
||||
; BC:FCB POINT
|
||||
;
|
||||
LXI H,WREAD+1
|
||||
MOV M,B
|
||||
DCX H
|
||||
MOV M,C
|
||||
LHLD WREAD
|
||||
XCHG
|
||||
MVI C,CREAD
|
||||
CALL BDOS
|
||||
RET
|
||||
;
|
||||
; SET DMA ADDRESS NOT USED
|
||||
; INPUT
|
||||
; BC:DMA ADDRESS
|
||||
;
|
||||
LXI H,WSRDMA+1
|
||||
MOV M,B
|
||||
DCX H
|
||||
MOV M,C
|
||||
LHLD WSRDMA
|
||||
XCHG
|
||||
MVI C,CSTDMA
|
||||
CALL BDOS
|
||||
RET
|
||||
;
|
||||
; CARRIAGE RETURN & LINE FEED
|
||||
;
|
||||
CRLF:
|
||||
MVI C,CR
|
||||
CALL CONOT
|
||||
MVI C,LF
|
||||
CALL CONOT
|
||||
RET
|
||||
;
|
||||
; PRINT NIBBLE BY HEXADECIMAL
|
||||
; INPUT
|
||||
; C:DATA
|
||||
;
|
||||
NIBBLE:
|
||||
LXI H,WNIBLE
|
||||
MOV M,C
|
||||
MVI A,9
|
||||
LXI H,WNIBLE
|
||||
CMP M
|
||||
JNC NIBBLS ;0 TO 9
|
||||
LDA WNIBLE ;A TO F
|
||||
ADI 'A'
|
||||
SUI 10
|
||||
MOV C,A
|
||||
CALL CONOT
|
||||
JMP NIBBEN
|
||||
;
|
||||
NIBBLS: ;0 TO 9
|
||||
LDA WNIBLE
|
||||
ADI '0'
|
||||
MOV C,A
|
||||
CALL CONOT
|
||||
NIBBEN:
|
||||
RET
|
||||
;
|
||||
; PRINT BYTE DATA BY HEXADECIMAL
|
||||
; INPUT
|
||||
; C:DATA
|
||||
;
|
||||
HXPRN:
|
||||
LXI H,WHXPRN
|
||||
MOV M,C
|
||||
LDA WHXPRN
|
||||
ANI 0F8H
|
||||
RAR
|
||||
RAR
|
||||
RAR
|
||||
RAR
|
||||
MOV C,A
|
||||
CALL NIBBLE ;PRINT HIGHER NIBBLE
|
||||
LDA WHXPRN
|
||||
ANI 00FH
|
||||
MOV C,A
|
||||
CALL NIBBLE ;PRINT LOWER NIBBLE
|
||||
RET
|
||||
;
|
||||
; PRINT WORD DATA
|
||||
; INPUT
|
||||
; BC:DATA
|
||||
;
|
||||
LOCPR:
|
||||
LXI H,WLOCPR+1
|
||||
MOV M,B
|
||||
DCX H
|
||||
MOV M,C ;SAVE DATA
|
||||
MVI C,' '
|
||||
CALL CONOT
|
||||
MVI C,' '
|
||||
CALL CONOT ;PRINT SPACE
|
||||
LHLD WLOCPR
|
||||
MOV A,H
|
||||
MOV C,A
|
||||
CALL HXPRN ;HIGHER BYTE
|
||||
LHLD WLOCPR
|
||||
MOV A,L
|
||||
MOV C,A
|
||||
CALL HXPRN ;LOWER BYTE
|
||||
MVI C,'H'
|
||||
CALL CONOT
|
||||
RET
|
||||
;
|
||||
; CHECK USER ID CODE
|
||||
; INPUT
|
||||
; DE:NDOS ENTRY
|
||||
; BC:ID CODE AREA
|
||||
;
|
||||
CHKUSC:
|
||||
LXI H,PNDOS+1
|
||||
MOV M,D
|
||||
DCX H
|
||||
MOV M,E ;SAVE NDOS ENTRY POINT
|
||||
DCX H
|
||||
MOV M,B
|
||||
DCX H
|
||||
MOV M,C ;SAVE ID CODE AREA
|
||||
CHKUSN: ;ONE DATA POINT LOOP
|
||||
MVI A,-1
|
||||
RAR
|
||||
JNC CHKUSE ;END (NOT USED)
|
||||
LXI H,CNTLDR
|
||||
MVI M,-1
|
||||
INX H
|
||||
MVI M,-1 ;INITIALIZE SEARCH COUNT
|
||||
CHKUSL: ;CHARACTER CHECK LOOP
|
||||
LDA CNTLDR
|
||||
INR A
|
||||
STA CNTLDR ;LOADER POINTER COUNT UP
|
||||
MOV C,A
|
||||
MVI B,0
|
||||
LHLD PIDCOD ;GET ID CODE AREA
|
||||
DAD B ;GET DATA POINT
|
||||
LDA CNTNDS
|
||||
INR A
|
||||
STA CNTNDS ;NDOS POINTER COUNT UP
|
||||
MOV C,A
|
||||
MVI B,0
|
||||
PUSH H
|
||||
LHLD PNDOS
|
||||
DAD B ;GET NDOS DATA POINT
|
||||
POP B
|
||||
LDAX B
|
||||
CMP M ;COMPARE CODE
|
||||
JNZ $+6 ;NOT MATCH
|
||||
JMP CHKUSL ;TO NEXT CHARACTER
|
||||
;
|
||||
MVI A,23 ;CHECK LENGTH NAME & USER ID TOTAL LENGTH
|
||||
LXI H,CNTLDR
|
||||
CMP M
|
||||
JNC $+4 ;NOT OK
|
||||
RET ;OK MATCH CODE
|
||||
;
|
||||
MVI A,0 ;CHECK END OF COMPARE
|
||||
LXI D,PNDOS
|
||||
CALL SUDMBY
|
||||
ORA L
|
||||
SUI 001H
|
||||
SBB A ;CHECK END OF MEMORY
|
||||
XCHG
|
||||
PUSH PSW
|
||||
MVI A,17 ;NAME LENGTH -1
|
||||
INX H
|
||||
SUB M
|
||||
SBB A ;CHECK NAME MATCH
|
||||
POP B
|
||||
MOV C,B
|
||||
ORA C
|
||||
RAR
|
||||
JNC CHKNXT ;NOT END TO NEXT
|
||||
LXI H,CSYNC ;COMPARE FAIL
|
||||
SHLD PFLNAM ;SYNCHRONIZATION ERROR
|
||||
JMP ERROR
|
||||
;
|
||||
CHKNXT: ;CHECK NEXT ADDRESS
|
||||
LHLD PNDOS
|
||||
INX H ;UP START ADDRESS
|
||||
SHLD PNDOS
|
||||
JMP CHKUSN ;CHECK AGAIN
|
||||
;
|
||||
CHKUSE: ;END DUMMY
|
||||
RET
|
||||
;
|
||||
; BREAK POINT FOR DEBUGGER
|
||||
;
|
||||
DEBBP:
|
||||
DI ;RESTART INSTRUCTION IS SET HERE
|
||||
RET
|
||||
;
|
||||
; GOTO COLD BOOT OF NDOS
|
||||
;
|
||||
GOTDOS:
|
||||
LXI H,PNDOSC
|
||||
SPHL ;SET STACK TO ENTRY POINT SAVE AREA
|
||||
DCX H
|
||||
MOV A,M
|
||||
CPI 'B'
|
||||
JNZ GOTDOE ;NOT BREAK
|
||||
LDA BPNUM ;BREAK, SO GET RESTART NUMBER
|
||||
ADD A
|
||||
ADD A
|
||||
ADD A
|
||||
ORI 0C7H ;MAKE RESTART CODE
|
||||
LHLD PDEBBP
|
||||
MOV M,A ;SAVE RESTART CODE
|
||||
CALL DEBBP ;TO BREAK ROUTINE
|
||||
GOTDOE: ;TO NDOS COLD START ROUTINE
|
||||
RET
|
||||
;
|
||||
; LOAD ONE FILE
|
||||
; INPUT
|
||||
; BC:BOTTOM OF FREE AREA
|
||||
; DE:FCB
|
||||
; OUTPUT
|
||||
; HL:TOP OF PROGRAM -1 ERROR
|
||||
;
|
||||
LOAD:
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
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 BDOS ;SET DMA ADDRESS TO SCRATCH AREA
|
||||
LHLD LDFCB
|
||||
XCHG
|
||||
MVI C,COPEN
|
||||
CALL BDOS ;OPEN FILE
|
||||
CPI -1
|
||||
MOV H,A
|
||||
MOV L,A
|
||||
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,0 ;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 BDOS ;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 BDOS ;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 BDOS ;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 BDOS ;READ ONE SECTOR
|
||||
ORA A
|
||||
RZ ;NOT ERROR
|
||||
OSRDER: ;NO DATA, SO ERROR
|
||||
POP H ;OVERRIDING RETURN
|
||||
LXI H,-1
|
||||
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
|
||||
;
|
||||
; AND ROUTINES
|
||||
; HL=HL AND A
|
||||
; HL=HL AND DE
|
||||
;
|
||||
MOV E,A
|
||||
MVI D,0
|
||||
ANHLDE:
|
||||
MOV A,E
|
||||
ANA L
|
||||
MOV L,A
|
||||
MOV A,D
|
||||
ANA H
|
||||
MOV H,A
|
||||
RET
|
||||
;
|
||||
; HL=(DE) AND A
|
||||
; HL=(HL) AND DE
|
||||
;
|
||||
XCHG
|
||||
MOV E,A
|
||||
MVI D,0
|
||||
ANHMDE:
|
||||
XCHG
|
||||
LDAX D
|
||||
ANA L
|
||||
MOV L,A
|
||||
INX D
|
||||
LDAX D
|
||||
ANA H
|
||||
MOV H,A
|
||||
RET
|
||||
;
|
||||
; SUBTRUCT ROUTINES
|
||||
; HL=A - HL
|
||||
; HL=DE - HL
|
||||
;
|
||||
SUBYHL:
|
||||
MOV E,A
|
||||
MVI D,0
|
||||
SUDEHL:
|
||||
MOV A,E
|
||||
SUB L
|
||||
MOV L,A
|
||||
MOV A,D
|
||||
SBB H
|
||||
MOV H,A
|
||||
RET
|
||||
;
|
||||
; HL=(DE) - (BC)
|
||||
;
|
||||
SUDMBM:
|
||||
MOV L,C
|
||||
MOV H,B
|
||||
MOV C,M
|
||||
INX H
|
||||
MOV B,M
|
||||
LDAX D
|
||||
SUB C
|
||||
MOV L,A
|
||||
INX D
|
||||
LDAX D
|
||||
SBB B
|
||||
MOV H,A
|
||||
RET
|
||||
;
|
||||
; HL=(DE) - A
|
||||
;
|
||||
SUDMBY:
|
||||
MOV L,A
|
||||
MVI H,000H
|
||||
LDAX D
|
||||
SUB L
|
||||
MOV L,A
|
||||
INX D
|
||||
LDAX D
|
||||
SBB H
|
||||
MOV H,A
|
||||
RET
|
||||
;
|
||||
; HL=A - (HL)
|
||||
; HL=DE - (HL)
|
||||
;
|
||||
MOV E,A
|
||||
MVI D,000H
|
||||
SUDEHM:
|
||||
MOV A,E
|
||||
SUB M
|
||||
MOV E,A
|
||||
MOV A,D
|
||||
INX H
|
||||
SBB M
|
||||
MOV D,A
|
||||
XCHG
|
||||
RET
|
||||
;
|
||||
; WORKING
|
||||
;
|
||||
PFLNAM: DW CDSKER ;LOAD ERROR COMMENT POINTER
|
||||
WCONOT: DB 0 ;WORK FOR CONSOLE OUT
|
||||
WBUFPR: DW 0 ;WORK FOR BUFFER PRINT
|
||||
WOPEN: DW 0 ;WORK FOR OPEN FILE
|
||||
WREAD: DW 0 ;WORK FOR READ SEQUENTIAL
|
||||
WSRDMA: DW 0 ;WORK FOR SET DMA
|
||||
WNIBLE: DB 0 ;NIBBLE OUT WORKING
|
||||
WHXPRN: DB 0 ;HEXA PRINT WORKING
|
||||
WLOCPR: DW 0 ;WORK FOR WORD PRINT
|
||||
;
|
||||
; FOR ID CODE CHECK
|
||||
;
|
||||
PIDCOD: DW 0
|
||||
PNDOS: DW 0
|
||||
CNTLDR: DB 0
|
||||
CNTNDS: DB 0
|
||||
;
|
||||
;
|
||||
DS 60 ;STACK AREA
|
||||
STACK:
|
||||
;
|
||||
BDOSPT: DW BDOS+1 ;POINTER DATA FOR DOS
|
||||
DW 0
|
||||
FREBOT: DW 0
|
||||
TOPPNT: DW 0
|
||||
;
|
||||
DS 9
|
||||
;
|
||||
; LOADING FILE FCB
|
||||
;
|
||||
FNDOS: ;FOR NDOS.SPR
|
||||
DB 0,'NDOS SPR'
|
||||
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
FSNIOS: ;FOR SNIOS.SPR
|
||||
DB 0,'SNIOS SPR'
|
||||
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
;
|
||||
FDEBUG: DS 1
|
||||
PNDOSC: DS 2
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
612
CP-NET/CPNET-80 SOURCE/GENNET.MAC
Normal file
612
CP-NET/CPNET-80 SOURCE/GENNET.MAC
Normal file
@@ -0,0 +1,612 @@
|
||||
; CP/NET GENERATOR FOR CP/NET VER.1.0 NOS
|
||||
;
|
||||
; 1982 8.27. VER.1.0
|
||||
;
|
||||
TITLE CP/NET GENERATOR FOR NOS VER.1.0
|
||||
;
|
||||
; EQUATIONS OF DATA
|
||||
;
|
||||
LF EQU 0AH ;LINE FEED
|
||||
CR EQU 0DH ;CARRIAGE RETURN
|
||||
;
|
||||
TOP EQU 0 ;MEMORY TOP
|
||||
BDOS EQU 5 ;BDOS ENTRY
|
||||
RESFCB EQU 5CH ;RESIDENT FCB
|
||||
SCTLNG EQU 128 ;SECTOR LENGTH
|
||||
;
|
||||
MINSIZ EQU 50H ;MINIMUM TARGET SYSTEM SIZE IS 20K
|
||||
;
|
||||
; EQUATIONS OF BDOS FUNCTION
|
||||
;
|
||||
CCONIN EQU 1 ;CONSOLE INPUT
|
||||
CCONOT EQU 2 ;CONSOLE OUT
|
||||
CBUFPR EQU 9 ;BUFFERED STRING PRINT
|
||||
CGETVR EQU 12 ;GET VERSION NUMBER
|
||||
COPEN EQU 15 ;OPEN FILE
|
||||
CCLOSE EQU 16 ;CLOSE FILE
|
||||
CDELET EQU 19 ;DELETE FILE
|
||||
CREAD EQU 20 ;READ FILE
|
||||
CWRITE EQU 21 ;WRITE FILE
|
||||
CMAKE EQU 22 ;MAKE FILE
|
||||
CSTDMA EQU 26 ;SET DMA ADDRESS
|
||||
;
|
||||
;
|
||||
; START OF MAIN
|
||||
;
|
||||
START:
|
||||
LXI SP,STACK
|
||||
LXI H,CSTUP
|
||||
CALL BUFPRN ;START UP COMMENT
|
||||
LXI B,RESFCB+1
|
||||
LDAX B
|
||||
DCX B
|
||||
CPI ' '
|
||||
JNZ $+6 ;EXIST SOME OUTPUT FILE NAME
|
||||
LXI B,CCPNET ;DEFAULT NAME
|
||||
LXI H,OUTFCB
|
||||
CALL CPYFCB ;COPY FCB FOR OUTPUT FILE
|
||||
LOOPR: ;RETRY LOOP
|
||||
LXI SP,STACK
|
||||
LXI H,CGTBTM
|
||||
CALL BUFPRN
|
||||
LXI H,-1 ;DEFAULT VALUE OF BOTTOM IS 0FFH
|
||||
CALL GETHEX ;GET BOTTOM PAGE
|
||||
MOV A,L
|
||||
INR A
|
||||
LXI H,CSIZTS
|
||||
CPI MINSIZ
|
||||
JC WHYPR ;TARGET SYSTEM SIZE TOO SMALL
|
||||
MOV H,A
|
||||
MVI L,0 ;GET RELOCATION BIAS
|
||||
XCHG
|
||||
LXI H,BFRLBS ;BIAS DATA BUFFER
|
||||
PUSH H
|
||||
LHLD BDOS+1
|
||||
MVI L,0 ;GET LOADING BIAS
|
||||
LXI B,IXFLNM ;LOADING FILE NAME INDEX
|
||||
LOOP: ;ONE FILE LOADHNG LOOP
|
||||
XTHL
|
||||
MOV M,E
|
||||
INX H
|
||||
MOV M,D ;SET POINTER
|
||||
XTHL
|
||||
PUSH H
|
||||
LXI H,INFCB
|
||||
CALL CPYFCB ;SET FILE NAME TO FCB
|
||||
POP H
|
||||
PUSH B
|
||||
LXI B,INFCB
|
||||
CALL PRNFLN ;PRINT FILE NAME
|
||||
LXI B,INFCB
|
||||
CALL LOAD ;LOAD ONE FILE
|
||||
POP B
|
||||
XTHL
|
||||
PUSH D
|
||||
CALL LOCPR ;PRINT TOP ADDRESS
|
||||
DCX H
|
||||
MOV A,M
|
||||
SUB E
|
||||
MOV E,A
|
||||
INX H
|
||||
MOV A,M
|
||||
SBB D
|
||||
MOV D,A ;GET LENGTH
|
||||
INX H
|
||||
CALL LOCPR ;PRINT LENGTH
|
||||
POP D
|
||||
XTHL
|
||||
LDAX B
|
||||
INR A
|
||||
JNZ LOOP ;TO NEXT FILE
|
||||
XTHL
|
||||
MOV M,E
|
||||
INX H
|
||||
MOV M,D ;SAVE TOP POINT
|
||||
INX H
|
||||
POP D
|
||||
MOV M,E
|
||||
INX H
|
||||
MOV M,D ;SAVE DATA BUFFER TOP
|
||||
CALL CRLF
|
||||
LXI B,OUTFCB
|
||||
CALL PRNFLN ;PRINT OUTPUT FILE NAME
|
||||
LXI H,CCHECK
|
||||
CALL BUFPRN ;CHECK OK
|
||||
CALL CONIN
|
||||
CPI 'Y'
|
||||
JNZ LOOPR ;RETRY
|
||||
CALL OUTFIL ;OUT SYSTEM FILE
|
||||
JMP TOP
|
||||
;
|
||||
; LOAD ONE FILE
|
||||
; INPUT
|
||||
; HL:BOTTOM OF FREE AREA
|
||||
; DE:LAST RELOCATION BIAS
|
||||
; BC:FCB
|
||||
; OUTPUT
|
||||
; HL:TOP OF LOADING BIAS
|
||||
; BC:TOP OF RELOCATION BIAS
|
||||
;
|
||||
LOAD:
|
||||
SHLD LDBOTM ;SAVE BOTTOM
|
||||
XCHG
|
||||
SHLD RLBOTM ;SAVE RELOCATION BIAS
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
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 BDOS ;SET DMA ADDRESS TO SCRATCH AREA
|
||||
LHLD LDFCB
|
||||
XCHG
|
||||
MVI C,COPEN
|
||||
CALL BDOS ;OPEN FILE
|
||||
LXI H,CNTFND
|
||||
INR A
|
||||
JZ WHYPR ;FILE 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
|
||||
XRA A
|
||||
SUB E
|
||||
MOV E,A
|
||||
MVI A,0
|
||||
SBB D
|
||||
MOV D,A
|
||||
LHLD RLBOTM ;GET LAST RELOCATION BIAS
|
||||
DAD D
|
||||
MVI L,0
|
||||
SHLD RLTOP ;SAVE RELOCATION DATA OF THIS FILE
|
||||
LHLD LDBOTM ;GET LOADING BOTTOM
|
||||
DAD D ;SUBTRUCT LENGTH FROM BOTTOM POINT
|
||||
MVI L,0 ;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
|
||||
LXI D,BOTTOM
|
||||
CALL CPHLDE
|
||||
LXI H,CSYSTS
|
||||
JC WHYPR ;SYSTEM TOO SMALL
|
||||
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 BDOS ;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 BDOS ;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
|
||||
LDA RLTOP+1
|
||||
MOV H,A ;SET RELOCATION BIAS
|
||||
LOADRL: ;RELOCATION LOOP
|
||||
MOV A,B
|
||||
ORA C
|
||||
JZ LOADRE ;LOADING END
|
||||
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 BDOS ;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
|
||||
;
|
||||
LOADRE: ;END OF LOADING
|
||||
POP H
|
||||
LHLD RLTOP
|
||||
XCHG
|
||||
LHLD LDTOP ;GET PARAMETER
|
||||
RET
|
||||
;
|
||||
; READ ONE SECTOR DATA
|
||||
;
|
||||
OSREAD:
|
||||
LHLD LDFCB ;GET FCB
|
||||
XCHG
|
||||
MVI C,CREAD
|
||||
CALL BDOS ;READ ONE SECTOR
|
||||
ORA A
|
||||
RZ ;NOT ERROR
|
||||
OSRDER: ;NO DATA, SO ERROR
|
||||
LXI H,CNODAT
|
||||
JMP WHYPR ;NO DATA ERROR
|
||||
;
|
||||
; OUTPUT SYSTEM FILE
|
||||
; SYSTEM PAGE
|
||||
; 2B:NDOS TOP
|
||||
; 2B:SNIOS TOP
|
||||
; 2B:BDOS TOP
|
||||
; 2B:BIOS TOP
|
||||
; 2B:LENGTH
|
||||
;
|
||||
OUTFIL:
|
||||
LXI D,OUTFCB
|
||||
MVI C,CDELET
|
||||
CALL BDOS ;DELETE FILE
|
||||
LXI B,OUTFCB
|
||||
LXI H,OUTFCB
|
||||
CALL CPYFCB ;CLEAR FCB
|
||||
LXI D,OUTFCB
|
||||
MVI C,CMAKE
|
||||
CALL BDOS ;MAKE OUTPUT FILE
|
||||
LXI H,CNODIR
|
||||
INR A
|
||||
JZ WHYPR ;NO DIRECTORY SPACE
|
||||
LXI H,DMABUF
|
||||
XRA A
|
||||
MVI B,SCTLNG
|
||||
MOV M,A ;CLEAR DMA BUFFER
|
||||
INX H
|
||||
DCR B
|
||||
JNZ $-3
|
||||
LHLD BFRLBS+10 ;GET BOTTOM
|
||||
LDA BDOS+2
|
||||
SUB H
|
||||
MOV H,A ;GET LENGTH
|
||||
SHLD BFRLBS ;SET LENGTH
|
||||
LXI H,BFRLBS+10
|
||||
LXI D,DMABUF
|
||||
MVI B,5
|
||||
DCX H
|
||||
MOV C,M
|
||||
DCX H
|
||||
MOV A,M ;GET BIAS DATA
|
||||
STAX D
|
||||
INX D
|
||||
MOV A,C
|
||||
STAX D ;SET DATA
|
||||
INX D
|
||||
DCR B
|
||||
JNZ $-10
|
||||
LXI D,DMABUF
|
||||
CALL WRITE ;WRITE SYSTEM PAGE
|
||||
LDA BFRLBS+1 ;GET LENGTH
|
||||
ADD A ;GET SECTOR COUNT
|
||||
LHLD BFRLBS+10 ;TOP OF DATA
|
||||
OUTFLL:
|
||||
XCHG
|
||||
LXI H,SCTLNG
|
||||
DAD D ;GET NEXT DMA ADDRESS
|
||||
PUSH H
|
||||
PUSH PSW ;SAVE COUNT
|
||||
CALL WRITE ;WRITE ONE SECTOR
|
||||
POP PSW
|
||||
POP H
|
||||
DCR A
|
||||
JNZ OUTFLL ;TO NEXT SECTOR
|
||||
LXI D,OUTFCB
|
||||
MVI C,CCLOSE
|
||||
CALL BDOS ;CLOSE FILE
|
||||
LXI H,CCLSER
|
||||
INR A
|
||||
JZ WHYPR ;CLOSE ERROR
|
||||
RET
|
||||
;
|
||||
; WRITE ONE SECTOR
|
||||
; INPUT
|
||||
; DE:DMA ADDRESS
|
||||
;
|
||||
WRITE:
|
||||
MVI C,CSTDMA
|
||||
CALL BDOS ;SET DMA ADDRESS
|
||||
LXI D,OUTFCB
|
||||
MVI C,CWRITE
|
||||
CALL BDOS ;WRITE ONE SECTOR
|
||||
LXI H,CWTERR
|
||||
ORA A
|
||||
JNZ WHYPR ;ERROR
|
||||
RET
|
||||
;
|
||||
; GET HEXADECIMAL VALUE
|
||||
; INPUT
|
||||
; HL:DEFAULT VALUE
|
||||
; OUTPUT
|
||||
; HL:OUTPUT VALUE
|
||||
;
|
||||
GETHEX:
|
||||
CALL CONIN ;GET FIRST CHARACTER
|
||||
CPI CR
|
||||
RZ ;DEFAULT MODE
|
||||
LXI H,0
|
||||
GETHXL: ;ONE CHARACTER LOOP
|
||||
SUI '0'
|
||||
JC LOOPR ;TOO SMALL
|
||||
CPI 10
|
||||
JC GETHXG ;0 TO 9
|
||||
SUI 'A'-'9'-1
|
||||
CPI 10
|
||||
JC LOOPR ;ERROR
|
||||
CPI 16
|
||||
JNC LOOPR ;TOO LARGE
|
||||
GETHXG: ;GET CODE
|
||||
DAD H
|
||||
DAD H
|
||||
DAD H
|
||||
DAD H ;*16
|
||||
ADD L
|
||||
MOV L,A ;ADD CURRENT DATA
|
||||
CALL CONIN
|
||||
CPI CR
|
||||
JNZ GETHXL ;TO NEXT
|
||||
RET ;END
|
||||
;
|
||||
; PRINT FILE NAME
|
||||
; INPUT
|
||||
; BC:FCB TOP
|
||||
;
|
||||
PRNFLN:
|
||||
CALL CRLF
|
||||
PUSH D
|
||||
MVI D,12
|
||||
INX B
|
||||
LDAX B
|
||||
CALL CONOT
|
||||
DCR D
|
||||
JNZ $-6
|
||||
POP D
|
||||
RET
|
||||
;
|
||||
; ERROR COMMENT OUT & ABORT
|
||||
; INPUT
|
||||
; HL:COMMENT POINTER
|
||||
;
|
||||
WHYPR:
|
||||
CALL BUFPRN
|
||||
JMP TOP
|
||||
;
|
||||
; COMPARE DOUBLE BYTES
|
||||
; FLAGS:SET BY HL-DE
|
||||
;
|
||||
CPHLDE:
|
||||
MOV A,H
|
||||
SUB D
|
||||
RNZ
|
||||
MOV A,L
|
||||
SUB E
|
||||
RET
|
||||
;
|
||||
; COPY FCB
|
||||
; INPUT
|
||||
; BC:SOURCE DATA POINTER
|
||||
; HL:DESTINATION FCB
|
||||
;
|
||||
CPYFCB:
|
||||
PUSH D
|
||||
MVI D,12
|
||||
LDAX B
|
||||
MOV M,A ;COPY FILE NAME PART
|
||||
INX B
|
||||
INX H
|
||||
DCR D
|
||||
JNZ $-5
|
||||
MVI D,21
|
||||
XRA A
|
||||
MOV M,A
|
||||
INX H
|
||||
DCR D
|
||||
JNZ $-3 ;CLEAR LEFT PART
|
||||
POP D
|
||||
RET
|
||||
;
|
||||
; CONSOLE INPUT
|
||||
; OUTPUT
|
||||
; A:DATA
|
||||
;
|
||||
CONIN:
|
||||
PUSH H
|
||||
PUSH D
|
||||
PUSH B
|
||||
MVI C,CCONIN
|
||||
CALL BDOS
|
||||
POP B
|
||||
POP D
|
||||
POP H
|
||||
CPI 3
|
||||
JZ TOP ;ABORTED
|
||||
CPI 'Z'+1
|
||||
RC
|
||||
ANI 5FH ;LOWER CASE TO UPER CASE
|
||||
RET
|
||||
;
|
||||
; CONSOLE OUT
|
||||
; INPUT
|
||||
; A:DATA
|
||||
;
|
||||
CONOT:
|
||||
PUSH H
|
||||
PUSH D
|
||||
PUSH B
|
||||
MVI C,CCONOT
|
||||
MOV E,A
|
||||
CALL BDOS
|
||||
POP B
|
||||
POP D
|
||||
POP H
|
||||
RET
|
||||
;
|
||||
; BUFFER PRINT
|
||||
; INPUT
|
||||
; HL:STRING POINT
|
||||
;
|
||||
BUFPRN:
|
||||
MOV A,M
|
||||
INX H
|
||||
ORA A
|
||||
RZ
|
||||
CALL CONOT
|
||||
JMP BUFPRN
|
||||
;
|
||||
; CARRIAGE RETURN & LINE FEED
|
||||
;
|
||||
CRLF:
|
||||
MVI A,CR
|
||||
CALL CONOT
|
||||
MVI A,LF
|
||||
JMP CONOT
|
||||
;
|
||||
; PRINT BYTE DATA BY HEXADECIMAL
|
||||
; INPUT
|
||||
; A:DATA
|
||||
;
|
||||
HXPRN:
|
||||
PUSH PSW
|
||||
RRC
|
||||
RRC
|
||||
RRC
|
||||
RRC
|
||||
CALL NIBBLE ;UPER HALF
|
||||
POP PSW
|
||||
NIBBLE: ;NIBBLE OUT
|
||||
ANI 0FH
|
||||
ADI '0'
|
||||
CPI '9'+1
|
||||
JC CONOT ;0 TO 9
|
||||
ADI 'A'-'9'-1
|
||||
JMP CONOT ;A TO F
|
||||
;
|
||||
; PRINT WORD DATA
|
||||
; INPUT
|
||||
; DE:DATA
|
||||
;
|
||||
LOCPR:
|
||||
MVI A,' '
|
||||
CALL CONOT
|
||||
MVI A,' '
|
||||
CALL CONOT ;PRINT SPACE
|
||||
MOV A,D
|
||||
CALL HXPRN ;HIGHER BYTE
|
||||
MOV A,E
|
||||
CALL HXPRN ;LOWER BYTE
|
||||
MVI A,'H'
|
||||
JMP CONOT
|
||||
;
|
||||
; INDEX OF LOADING FILE NAME
|
||||
;
|
||||
IXFLNM:
|
||||
DB 0,'NBIOS SPR'
|
||||
DB 0,'NBDOS SPR'
|
||||
DB 0,'NNIOS SPR'
|
||||
DB 0,'NDOS SPR'
|
||||
DB -1
|
||||
;
|
||||
CCPNET: DB 0,'CPNET SYS' ;DEFAULT OUTPUT FILE NAME
|
||||
;
|
||||
; COMMENTS
|
||||
;
|
||||
CSTUP: DB CR,LF,LF,'CP/NET 1.0 GENERATOR'
|
||||
DB CR,LF,'====================',CR,LF,0
|
||||
;
|
||||
;
|
||||
CGTBTM: DB CR,LF,'BOTTOM PAGE ? (FF) ',0
|
||||
CSIZTS: DB CR,LF,'SYSTEM SIZE TOO SMALL',0
|
||||
CCHECK: DB ' IS SYSTEM FILE NAME, OK ? (Y/N) ',0
|
||||
CNODIR: DB CR,LF,'NO DIRECTORY SPACE',0
|
||||
CCLSER: DB CR,LF,'CAN''T CLOSE OUTPUT FILE',0
|
||||
CWTERR: DB CR,LF,'NO DATA SPACE',0
|
||||
CNTFND: DB ' NOT FOUND',0
|
||||
CNODAT: DB ' FILE TOO SHORT',0
|
||||
CSYSTS: DB CR,LF,'HOST SYSTEM TOO SMALL',0
|
||||
;
|
||||
; WORKINGS
|
||||
;
|
||||
; FILE CONTROL BLOCKS
|
||||
;
|
||||
INFCB: DS 33 ;FOR INPUT FILE
|
||||
OUTFCB: DS 33 ;FOR OUTPUT FILE
|
||||
;
|
||||
BFRLBS: DS 2*6 ;RELOCATION BIAS BUFFER
|
||||
;
|
||||
DMABUF: DS 128 ;ONE SECTOR BUFFER
|
||||
;
|
||||
; 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
|
||||
RLBOTM: DS 2 ;RELOCATION BOTTOM
|
||||
RLTOP: DS 2 ;RELOCATION BIAS
|
||||
LDCNT: DS 1 ;LOAD SECTOR COUNT
|
||||
LDPNT: DS 2 ;LOADING POINTER
|
||||
;
|
||||
;
|
||||
DS 64
|
||||
STACK:
|
||||
;
|
||||
;
|
||||
BOTTOM: ;BOTTOM OF PROGRAM
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
653
CP-NET/CPNET-80 SOURCE/NBDOS.MAC
Normal file
653
CP-NET/CPNET-80 SOURCE/NBDOS.MAC
Normal file
@@ -0,0 +1,653 @@
|
||||
; DISK OPERATING SYSTEM
|
||||
; OF CP/NET NOS NO DISK OPERATION
|
||||
;
|
||||
; 1982.8.30. FOR NOS
|
||||
;
|
||||
TITLE BASIC OPERATING SYSTEM FOR NOS CP/NET SYSTEM
|
||||
;
|
||||
; EQUATIONS OF SYSTEM POINTER IN LOWER ADDRESS
|
||||
;
|
||||
RBOOT EQU 0 ;SYSTEM REBOOT ENTRY
|
||||
IOSTS EQU 3 ;I/O STATUS
|
||||
CDISK EQU 4 ;CURRENT DISK & USER CODE
|
||||
ENBDS EQU 5 ;BDOS ENTRY
|
||||
SYSDM EQU 80H ;SYSTEM DMA ADDRESS
|
||||
;
|
||||
; BDOS USER CODE AREA
|
||||
;
|
||||
BDOS:
|
||||
DB 0,0,0,0,0,0
|
||||
;
|
||||
BDOSS: ;ENTRY OF BDOS FROM +6
|
||||
JMP BDOST
|
||||
;
|
||||
; ERROR PROCESS ROUTINE TABLE
|
||||
;
|
||||
AFLRW: DW EFLRW ;DISK READ WRITE ERROR
|
||||
ADRIV: DW EDRIV ;DISK SELECT ERROR
|
||||
ADKCG: DW EDKCG ;R/O DISK ERROR
|
||||
ADKCH: DW EDKCH ;R/O FILE ERROR
|
||||
;
|
||||
; MAIN ROUTINE OF BDOS
|
||||
; INPUT
|
||||
; C:NUMBER OF BDOS FUNCTION
|
||||
; DE:PARAMETER OF INPUT
|
||||
; OUTPUT
|
||||
; A:PARAMETER OF OUTPUT WHEN ONE BYTE OR LOWER DATA
|
||||
; B:PARAMETER OF OUTPUT HIGHER DATA WHEN DOUBLE BYTES
|
||||
; HL:PARAMETER OF DOUBLE BYTES
|
||||
;
|
||||
BDOST:
|
||||
XCHG
|
||||
SHLD INPAR ;SAVE INPUT PARAMETER
|
||||
XCHG
|
||||
LXI H,0
|
||||
SHLD OTPAR ;CLEAR OUTPUT PARAMETERS
|
||||
DAD SP
|
||||
SHLD INSTK ;SAVE STACK POINTER
|
||||
LXI SP,STACK ;SET BDOS STACK
|
||||
LXI H,BDOSE ;END OF ROUTINE
|
||||
PUSH H ;SAVE RETURN ADDRESS
|
||||
MOV A,C
|
||||
CPI 41
|
||||
RNC ;CALL NUMBER OVER
|
||||
MOV C,E ;SAVE ONE BYTE DATA
|
||||
LXI H,MINDX ;MAIN INDEX OF FUNCTION
|
||||
MOV E,A
|
||||
MVI D,0
|
||||
DAD D
|
||||
DAD D
|
||||
MOV E,M
|
||||
INX H
|
||||
MOV D,M ;GET ROUTINE ADDRESS
|
||||
LHLD INPAR ;GET INPUT PARAMETER
|
||||
XCHG
|
||||
PCHL ;TO EACH ROUTINE
|
||||
;
|
||||
; MAIN INDEX OF BODS FUNCTIONS
|
||||
;
|
||||
MINDX:
|
||||
DW WBOOT ;BOOT 0
|
||||
DW MCNIN ;CONSOLE INPUT
|
||||
DW MCNOT ;CONSOLE OUTPUT
|
||||
DW MREAD ;READER INPUT
|
||||
DW PUNCH ;PUNCHER OUTPUT
|
||||
DW LIST ;LIST OUTPUT 5
|
||||
DW MDCIO ;DIRECT CONSOLE I/O
|
||||
DW MGIOB ;GET I/O BYTE
|
||||
DW MSIOB ;SET I/O BYTE
|
||||
DW MBFPR ;PRINT STRING
|
||||
DW MBFRD ;READ CONSOLE BUFFER 10
|
||||
DW MSNCN ;GET CONSOLE STATUS
|
||||
DW MVSNM ;GET VERSION NUMBER
|
||||
DW MSNCR ;INITIALIZE
|
||||
DW MDVSL ;SELECT DRIVE
|
||||
DW MDKDUM ;OPEN FILE 15
|
||||
DW MDKDUM ;CLOSE FILE
|
||||
DW MDKDUM ;SEARCH FILE
|
||||
DW MDKDUM ;SEARCH FOR NEXT
|
||||
DW MDKDUM ;DELETE FILE
|
||||
DW MDKDUM ;READ SEQUENTIAL 20
|
||||
DW MDKDUM ;WRITE SEQUENTIAL
|
||||
DW MDKDUM ;MAKE FILE
|
||||
DW MDKDUM ;RENAME FILE
|
||||
DW MSNCR ;GET LOG-IN VECTOR
|
||||
DW MSNCR ;GET CURRENT DRIVE 25
|
||||
DW MSNCR ;SET DMA ADDRESS
|
||||
DW MDKDUM ;GET ALLOCATION MAP POINT
|
||||
DW MDKDUM ;SET WRITE PROTECT FLAG
|
||||
DW MDKDUM ;GET WRITE PROTECT FLAG ADDRESS
|
||||
DW MDKDUM ;SET FILE ATTRIBUTES 30
|
||||
DW MDKDUM ;GET DISK PARAMETER ADDRESS
|
||||
DW MUSER ;SET OR GET USER CODE
|
||||
DW MDKDUM ;READ RANDOM
|
||||
DW MDKDUM ;WRITE RANDOM
|
||||
DW MDKDUM ;COMPUTE FILE SIZE 35
|
||||
DW MDKDUM ;GET RANDOM RECODE
|
||||
DW MDKDUM ;RESET DRIVE
|
||||
DW MSNCR ;NOT USE
|
||||
DW MSNCR ;NOT USE
|
||||
DW MDKDUM ;WRITE RANDOM WITH FILL ZERO 40
|
||||
;
|
||||
; ERROR COMMENT OUT ROUTINES
|
||||
;
|
||||
; DISK READ WRITE ERROR
|
||||
;
|
||||
EFLRW:
|
||||
LXI H,CFLRW
|
||||
CALL ERPRN ;"BDOS ERR ON "X": BAD SECTOR"
|
||||
CPI 03H ;CONTROL-C "REBOOT CODE"
|
||||
JZ RBOOT ;TO REBOOT
|
||||
RET
|
||||
;
|
||||
; DISK SELECT ERROR
|
||||
;
|
||||
EDRIV:
|
||||
LXI H,CDRIV ;"SELECT"
|
||||
JMP EDKCH+3
|
||||
;
|
||||
; READ ONLY ERROR
|
||||
;
|
||||
EDKCG:
|
||||
LXI H,CDKCG ;"R/O"
|
||||
JMP EDKCH+3
|
||||
EDKCH:
|
||||
LXI H,CDKCH ;"FILE R/O"
|
||||
CALL ERPRN ;"BDOS ERR ON "X": ..."
|
||||
LXI H,CDISK
|
||||
MOV A,M
|
||||
ANI 0F0H
|
||||
MOV M,A ;TO DISK A:
|
||||
JMP RBOOT ;TO REBOOT
|
||||
;
|
||||
; ERROR COMMENT CODES
|
||||
;
|
||||
CERPN: DB 'Bdos Err On : $'
|
||||
CFLRW: DB 'Bad Sector$'
|
||||
CDRIV: DB 'Select$'
|
||||
CDKCH: DB 'File '
|
||||
CDKCG: DB 'R/O$'
|
||||
;
|
||||
; ERROR COMMENT OUT & KEY RESPONSE WAIT
|
||||
; INPUT
|
||||
; HL:ADDRESS OF COMMENT
|
||||
;
|
||||
ERPRN:
|
||||
PUSH H ;SAVE COMMENT INDEX
|
||||
CALL CRLF ;CARRIAGE RETURN & LINE FEED
|
||||
LDA NDRIV ;DRIVE NUMBER
|
||||
ADI 'A'
|
||||
STA CERPN+12 ;SET CODE TO COMMENT
|
||||
LXI B,CERPN
|
||||
CALL BFPRN ;"BDOS ERR ON "X": "
|
||||
POP B
|
||||
CALL BFPRN ;PRINT EACH COMMENT
|
||||
;
|
||||
; CONSOLE I/O ROUTINES
|
||||
;
|
||||
; CONSOLE INPUT WITH CONSOLE INTERRUPT CODE CHECK
|
||||
; OUTPUT
|
||||
; A:CODE OF INPUT
|
||||
;
|
||||
CONSI:
|
||||
LXI H,INCON ;CONSOLE INTERRUPT CODE
|
||||
MOV A,M ;GET CODE
|
||||
MVI M,0 ;CLEAR CODE
|
||||
ORA A
|
||||
RNZ ;NOW CODE HAS BEEN SET
|
||||
JMP CONIN ;TO NORMAL CONSOLE INPUT
|
||||
;
|
||||
; CONSOLE INPUT WITH CONTROL CODE TREATMENT
|
||||
;
|
||||
CONCI:
|
||||
CALL CONSI ;CONSOLE INPUT
|
||||
CALL CONCK ;CONTROL CODE CHECK
|
||||
RC ;CONTROL CODE
|
||||
PUSH PSW ;NORMAL CODE
|
||||
MOV C,A
|
||||
CALL PRINS ;PRINT WITH TAB TREATMENT
|
||||
POP PSW
|
||||
RET
|
||||
;
|
||||
; CONTROL CODE CHECK EXCEPT CR,LF,HTAB,BACK SPACE
|
||||
; INPUT
|
||||
; A:CODE
|
||||
; OUTPUT
|
||||
; CF:ON CONTROL CODE
|
||||
;
|
||||
CONCK:
|
||||
CPI 0DH ;CARRIAGE RETURN
|
||||
RZ
|
||||
CPI 0AH ;LINE FEED
|
||||
RZ
|
||||
CPI 09H ;HORIZONTAL TAB
|
||||
RZ
|
||||
CPI 08H ;BACK SPACE
|
||||
RZ
|
||||
CPI 20H ;SPACE
|
||||
RET
|
||||
;
|
||||
; CONSOLE INTERRUPT CHECK ROUTINE
|
||||
; OUTPUT
|
||||
; A:0=NO INTERRUPT, 1=INTERRUPTED & CODE IS IN "INCON"
|
||||
;
|
||||
CONIT:
|
||||
LDA INCON ;CONSOLE INTERRUPT CODE
|
||||
ORA A
|
||||
JNZ CONIG+3 ;NOW INTERRUPTED
|
||||
CALL CONST ;GET STATUS
|
||||
ANI 1 ;CHECK READY
|
||||
RZ ;NO INPUT
|
||||
CALL CONIN ;GET INPUT
|
||||
CPI 13H ;CONTROL-S "FREEZE"
|
||||
JNZ CONIG
|
||||
CALL CONIN ;FREEZE THE SYSTEM TO NEXT INPUT
|
||||
CPI 03H ;CONTROL-C "REBOOT"
|
||||
JZ RBOOT ;NOW REBOOT
|
||||
XRA A ;NOW CODE IS IGNORED
|
||||
RET
|
||||
CONIG: ;GET CODE
|
||||
STA INCON ;SET CODE
|
||||
MVI A,1 ;SET FLAG OF GETTING
|
||||
RET
|
||||
;
|
||||
; PRINT TO CONSOLE WITH CONSOLE INTERRUPT CHECK
|
||||
; INPUT
|
||||
; C:PRINT CODE
|
||||
;
|
||||
PRINT:
|
||||
LDA ECHKL ;GET ECHO KILL MODE
|
||||
ORA A
|
||||
JNZ PRINK ;NOW ECHO KILL
|
||||
PUSH B
|
||||
CALL CONIT ;CHECK CONSOLE INTERRUPT
|
||||
POP B ;GET PRINT CODE
|
||||
PUSH B
|
||||
CALL CONOT ;CONSOLE OUT THE CHARACTER
|
||||
POP B ;GET PRINT CODE
|
||||
PUSH B
|
||||
LDA OTLST ;GET LIST OUT MODE
|
||||
ORA A
|
||||
CNZ LIST ;LIST OUT
|
||||
POP B
|
||||
PRINK:
|
||||
MOV A,C
|
||||
LXI H,PCARI ;CARRIAGE POSITION
|
||||
CPI 7FH
|
||||
RZ ;DELETE CODE
|
||||
INR M ;UP THE CARRIAGE POSITION
|
||||
CPI 20H
|
||||
RNC ;NOW PRINTING CHARACTER
|
||||
DCR M ;CONTROL CODE
|
||||
MOV A,M
|
||||
ORA A
|
||||
RZ
|
||||
MOV A,C
|
||||
CPI 08H ;BACK SPACE
|
||||
JNZ $+5
|
||||
DCR M
|
||||
RET
|
||||
CPI 0AH ;LINE FEED
|
||||
RNZ ;NOT LINE FEED
|
||||
MVI M,0 ;RESET THE COUNTER
|
||||
RET
|
||||
;
|
||||
; PRINT WITH CONTROL CODE VISIBLE
|
||||
; INPUT
|
||||
; C:CODE
|
||||
;
|
||||
PRINC:
|
||||
MOV A,C
|
||||
CALL CONCK ;CONTROL CODE CHECK
|
||||
JNC PRINS ;NORMAL CODE
|
||||
PUSH PSW ;CONTROL CODE
|
||||
MVI C,5EH ;UPER ARROW IS CONTROL CODE MARK
|
||||
CALL PRINT
|
||||
POP PSW
|
||||
ORI 40H ;MAKE TO VISIBLE CODE
|
||||
MOV C,A
|
||||
;
|
||||
; 2:CONSOLE OUTPUT
|
||||
;
|
||||
MCNOT:
|
||||
PRINS:
|
||||
MOV A,C
|
||||
CPI 09H ;HORIZONTAL TAB
|
||||
JNZ PRINT ;OTHER CODE
|
||||
MVI C,20H
|
||||
CALL PRINT ;SPACE PRINT
|
||||
LDA PCARI
|
||||
ANI 07H ;CHECK CARRIAGE POSITION
|
||||
JNZ $-10 ;TO TAB LOOP
|
||||
RET
|
||||
;
|
||||
; BACK SPACE WITH ERASE ON CRT
|
||||
;
|
||||
BACKS:
|
||||
CALL BACK
|
||||
MVI C,20H
|
||||
CALL CONOT ;ERASE
|
||||
BACK:
|
||||
MVI C,08H
|
||||
JMP CONOT
|
||||
;
|
||||
; PRINT "#" & CRLF
|
||||
;
|
||||
NCRLF:
|
||||
MVI C,23H ;"#"
|
||||
CALL PRINT
|
||||
CALL CRLF
|
||||
NCRLL:
|
||||
LDA PCARI ;GET CARIAGE POSITION
|
||||
LXI H,PPROM
|
||||
CMP M
|
||||
RNC
|
||||
MVI C,20H
|
||||
CALL PRINT
|
||||
JMP NCRLL
|
||||
;
|
||||
; CARIAGE RETURN & LINE FEED
|
||||
;
|
||||
CRLF:
|
||||
MVI C,0DH ;CARRIAGE RETURN
|
||||
CALL PRINT
|
||||
MVI C,0AH ;LINE FEED
|
||||
JMP PRINT
|
||||
;
|
||||
; BUFFERED CHARACTER PRINT END BY "$"
|
||||
; INPUT
|
||||
; BC:BUFFER TOP ADDRESS
|
||||
;
|
||||
BFPRN:
|
||||
LDAX B ;GET CODE
|
||||
CPI 24H ;"$"
|
||||
RZ ;END CODE
|
||||
INX B
|
||||
PUSH B
|
||||
MOV C,A
|
||||
CALL PRINS ;PRINT WITH TAB TREATMENT
|
||||
POP B
|
||||
JMP BFPRN ;TO NEXT CODE
|
||||
;
|
||||
; 10:READ CONSOLE BUFFER
|
||||
;
|
||||
MBFRD:
|
||||
LDA PCARI
|
||||
STA PPROM ;SET PROMPT POSITION
|
||||
LHLD INPAR ;GET CHARACTER BUFFER
|
||||
MOV C,M ;GET MAXIMUM BUFFER LENGTH
|
||||
INX H
|
||||
PUSH H ;SAVE POINTER OF CURRENT LENGTH COUNTER
|
||||
MVI B,0 ;RESET COUNTER
|
||||
STREL: ;ONE CHARACTER LOOP
|
||||
PUSH B
|
||||
PUSH H
|
||||
CALL CONSI
|
||||
POP H
|
||||
POP B
|
||||
CPI 0DH ;CARIAGE RETURN
|
||||
JZ STREE ;GET END CODE
|
||||
CPI 0AH ;LINE FEED
|
||||
JZ STREE ;GET END CODE
|
||||
CPI 08H ;BACK SPACE
|
||||
JNZ STREK
|
||||
MOV A,B
|
||||
ORA A
|
||||
JZ STREL ;COUNT IS ZERO
|
||||
DCR B
|
||||
LDA PCARI
|
||||
STA ECHKL ;SET ECHO KILL COUNT
|
||||
JMP STREI
|
||||
STREK:
|
||||
CPI 7FH ;RUBOUT IS LAST CHARACTER DELETE
|
||||
JNZ STREA
|
||||
MOV A,B
|
||||
ORA A ;COUNTER CHECK
|
||||
JZ STREL ;THERE IS NO CHARACTER
|
||||
MOV A,M ;GET LAST CODE
|
||||
DCR B ;DOWN OF POINTER & COUNTER
|
||||
DCX H
|
||||
JMP STRES ;TO PRINT
|
||||
STREA:
|
||||
CPI 05H ;CONTROL-E "ONLY LINE CHANGE"
|
||||
JNZ STREB
|
||||
PUSH B
|
||||
PUSH H
|
||||
CALL CRLF ;LINE CHANGE
|
||||
XRA A
|
||||
STA PPROM ;PROMPT POSITION TOP
|
||||
JMP STREL+2 ;TO NEXT READ
|
||||
STREB:
|
||||
CPI 10H ;CONTROL-P "LIST MODE CHANGE"
|
||||
JNZ STREC
|
||||
PUSH H
|
||||
LXI H,OTLST ;LIST OUT MODE
|
||||
MVI A,01H
|
||||
SUB M ;CHANGE LIST OUT MODE
|
||||
MOV M,A
|
||||
POP H
|
||||
JMP STREL ;TO NEXT
|
||||
STREC:
|
||||
CPI 18H ;CONTROL-X CANCEL OF NOW SET
|
||||
JNZ STREY
|
||||
POP H
|
||||
STREX: ;CANSEL BY ERASE
|
||||
LDA PPROM ;PROMPT POSITION
|
||||
LXI H,PCARI
|
||||
CMP M
|
||||
JNC MBFRD ;NOW TO TOP
|
||||
DCR M
|
||||
CALL BACKS ;ERASE BACK
|
||||
JMP STREX ;ERASE LOOP
|
||||
STREY:
|
||||
CPI 15H ;CONTROL-U "CANCEL OF NOW SET"
|
||||
JNZ STREF
|
||||
CALL NCRLF ;"#" & CR,LF
|
||||
POP H
|
||||
JMP MBFRD ;TO START POINT
|
||||
STREF:
|
||||
CPI 12H ;CONTROL-R "CHANGE LINE & PRINT LEFT CODES"
|
||||
JNZ STREN ;NORMAL CODE
|
||||
STREI:
|
||||
PUSH B
|
||||
CALL NCRLF ;"#" & CR,LF
|
||||
POP B
|
||||
POP H ;GET POINTERS
|
||||
PUSH H
|
||||
PUSH B
|
||||
STREG: ;PRINT LEFT CODES
|
||||
MOV A,B ;COUNT OF LEFT CODE
|
||||
ORA A
|
||||
JZ STREH ;END OF PRINT
|
||||
INX H
|
||||
MOV C,M ;GET CODE
|
||||
DCR B
|
||||
PUSH B
|
||||
PUSH H
|
||||
CALL PRINC ;PRINT WITH CONTROL CODE VISIBLE
|
||||
POP H
|
||||
POP B
|
||||
JMP STREG ;TO NEXT CHARACTER PRINT
|
||||
STREH:
|
||||
PUSH H
|
||||
LDA ECHKL
|
||||
ORA A
|
||||
JZ STREL+2 ;NORMAL MODE
|
||||
LXI H,PCARI
|
||||
SUB M
|
||||
STA ECHKL
|
||||
CALL BACKS ;BACK TO LAST POSITION
|
||||
LXI H,ECHKL
|
||||
DCR M
|
||||
JNZ $-7
|
||||
JMP STREL+2
|
||||
STREN: ;NORMAL CODES
|
||||
INX H
|
||||
MOV M,A ;SET CODE & POINTER UP
|
||||
INR B ;COUNTER UP
|
||||
STRES: ;ECHO PRINT
|
||||
PUSH B
|
||||
PUSH H
|
||||
MOV C,A
|
||||
CALL PRINC ;PRINT WITH CONTROL CODE VISIBLE
|
||||
POP H
|
||||
POP B
|
||||
MOV A,M
|
||||
CPI 03H ;CONTROL-C "REBOOT"
|
||||
MOV A,B
|
||||
JNZ $+8
|
||||
CPI 01H ;THE FIRST CODE
|
||||
JZ RBOOT ;TO REBOOT
|
||||
CMP C
|
||||
JC STREL ;TO NEXT READ
|
||||
STREE:
|
||||
POP H ;BUFFER FULL OR CR END
|
||||
MOV M,B
|
||||
MVI C,0DH
|
||||
JMP PRINT ;PRINT CARRIAGE RETURN & END
|
||||
;
|
||||
; 1:CONSOLE INPUT
|
||||
;
|
||||
MCNIN:
|
||||
CALL CONCI ;CONSOLE INPUT
|
||||
JMP MOPST
|
||||
;
|
||||
; 3:READER INPUT
|
||||
;
|
||||
MREAD:
|
||||
CALL READR ;READ ONE BYTE
|
||||
JMP MOPST
|
||||
;
|
||||
; 6:DIRECT CONSOLE I/O
|
||||
; INPUT
|
||||
; C:-1 INPUT -2 GET STATUS OTHER OUTPUT
|
||||
;
|
||||
MDCIO:
|
||||
MOV A,C
|
||||
INR A
|
||||
JZ MDCIS ;INPUT MODE
|
||||
INR A
|
||||
JZ CONST ;STATUS READ
|
||||
JMP CONOT ;DIRECT OUT
|
||||
MDCIS:
|
||||
CALL CONST
|
||||
ORA A
|
||||
JZ BDOSE ;NOT READY
|
||||
CALL CONIN ;CONSOLE INPUT
|
||||
JMP MOPST
|
||||
;
|
||||
; 7:GET I/O BYTE
|
||||
;
|
||||
MGIOB:
|
||||
LDA IOSTS ;GET DATA
|
||||
JMP MOPST
|
||||
;
|
||||
; 8:SET I/O BYTE
|
||||
;
|
||||
MSIOB:
|
||||
LXI H,IOSTS
|
||||
MOV M,C ;SET DATA
|
||||
RET
|
||||
;
|
||||
; 9:PRINT STRING TERMINATED BY "$"
|
||||
;
|
||||
MBFPR:
|
||||
XCHG
|
||||
MOV C,L
|
||||
MOV B,H ;GET INDEX POINT
|
||||
JMP BFPRN ;PRINT
|
||||
;
|
||||
; 11:GET CONSOLE STATUS
|
||||
;
|
||||
MSNCN:
|
||||
CALL CONIT
|
||||
MOPST:
|
||||
STA OTPAR ;SET OUTPUT PARAMETER
|
||||
MSNCR:
|
||||
RET
|
||||
;
|
||||
; SET ERROR FLAG TO OUTPUT PARAMETER AREA
|
||||
;
|
||||
STOTP:
|
||||
MVI A,1
|
||||
JMP MOPST
|
||||
;
|
||||
; 12:GET VERSION NUMBER
|
||||
;
|
||||
MVSNM:
|
||||
MVI A,22H ;VERSION 2.2
|
||||
JMP MOPST
|
||||
;
|
||||
; 32:SET OR GET USER NUMBER
|
||||
;
|
||||
MUSER:
|
||||
LDA INPAR
|
||||
CPI -1
|
||||
JNZ MUSES ;SET MODE
|
||||
LDA MDUSR ;GET MODE
|
||||
JMP MOPST
|
||||
;
|
||||
MUSES: ;SET MODE
|
||||
ANI 1FH
|
||||
STA MDUSR
|
||||
RET
|
||||
;
|
||||
; DATA AREA FOR BASIC I/O
|
||||
;
|
||||
ECHKL: DB 0 ;ECHO KILL COUNT
|
||||
PPROM: DB 0 ;PROMPT POSITION
|
||||
PCARI: DB 0 ;CONSOLE CARRIAGE POSITION COUNTER
|
||||
OTLST: DB 0 ;LIST OUTPUT MODE 0 NOT OUT
|
||||
INCON: DB 0 ;CONSOLE INTERRUPT CODE
|
||||
INSTK: DS 2 ;USER STACK POINTER SAVE BUFFER
|
||||
DS 48
|
||||
STACK: ;SYSTEM STACK
|
||||
MDUSR: DB 0 ;USER MODE
|
||||
NDRIV: DB 0 ;DRIVE NUMBER
|
||||
INPAR: DW 0000H ;INPUT PARAMETER BUFFER
|
||||
OTPAR: DW 0000H ;OUTPUT PARAMETER BUFFER
|
||||
;
|
||||
; DISK OPERATION ROUTINES
|
||||
;
|
||||
; 14:SELECT DISK
|
||||
;
|
||||
MDVSL:
|
||||
LDA INPAR ;GET DISK NUMBER
|
||||
STA NDRIV ;SET AS CURRENT DISK
|
||||
;
|
||||
; ERROR ROUTINES
|
||||
;
|
||||
DNERR: ;DRIVE NUMBER ERROR
|
||||
LXI H,ADRIV
|
||||
ERROR: ;JUMP TO EACH ROUTINE
|
||||
MOV E,M
|
||||
INX H
|
||||
MOV D,M
|
||||
XCHG
|
||||
PCHL
|
||||
;
|
||||
; DUMMY FOR DISK OPERATION
|
||||
;
|
||||
MDKDUM:
|
||||
LXI H,-1
|
||||
SHLD OTPAR ;SET ERROR FLAG TO OUTPUT DATA
|
||||
RET
|
||||
;
|
||||
; BDOS END PROCESS
|
||||
;
|
||||
BDOSE:
|
||||
LHLD INSTK
|
||||
SPHL ;SET STACK POINTER
|
||||
LHLD OTPAR
|
||||
MOV A,L
|
||||
MOV B,H ;SET RETURN PARAMETER
|
||||
RET
|
||||
;
|
||||
;
|
||||
ORG (($-BDOS+256) AND 0FF00H)-1
|
||||
DB 0
|
||||
;
|
||||
;
|
||||
; POINTERS TO BASIC I/O SYSTEM
|
||||
;
|
||||
BOOT EQU $ ;COLD START BOOTING
|
||||
WBOOT EQU $+3 ;WARM BOOTING
|
||||
CONST EQU $+6 ;CONSOLE STATUS
|
||||
CONIN EQU $+9 ;CONSOLE INPUT
|
||||
CONOT EQU $+12 ;CONSOLE OUTPUT
|
||||
LIST EQU $+15 ;LIST OUTPUT
|
||||
PUNCH EQU $+18 ;PUNCH OUTPUT
|
||||
READR EQU $+21 ;READER INPUT
|
||||
HOME EQU $+24 ;MOVE DISK TO TRACK ZERO
|
||||
SELDK EQU $+27 ;SELECT DISK DRIVE
|
||||
SETRK EQU $+30 ;SET TRACK NUMBER
|
||||
SETSC EQU $+33 ;SET SECTOR NUMBER
|
||||
SETDM EQU $+36 ;SET DMA ADDRESS
|
||||
READ EQU $+39 ;READ ONE SECTOR
|
||||
WRITE EQU $+42 ;WRITE ONE SECTOR
|
||||
LISTS EQU $+45 ;LIST STATUS
|
||||
SCTRN EQU $+48 ;SECTOR TRANSLATE
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
738
CP-NET/CPNET-80 SOURCE/NBOOT.MAC
Normal file
738
CP-NET/CPNET-80 SOURCE/NBOOT.MAC
Normal file
@@ -0,0 +1,738 @@
|
||||
; CP/NET BOOTING LOADER
|
||||
;
|
||||
; 1982.8.27. VER.1.0
|
||||
;
|
||||
; EQUATIONS OF DATA
|
||||
;
|
||||
TOP EQU 0 ;MEMORY TOP
|
||||
;
|
||||
; EQUATIONS OF CP/NET FUNCTION
|
||||
;
|
||||
COPEN EQU 15 ;OPEN FILE
|
||||
CREAD EQU 20 ;READ ONE SECTOR
|
||||
CSTUSC EQU 32 ;SET USER CODE
|
||||
CLOGIN EQU 64 ;LOG IN
|
||||
;
|
||||
; 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
|
||||
;
|
||||
TMORTY EQU 100 ;TIME OUT RETRY COUNT
|
||||
MAXRTY EQU 10 ;SEND MESSAGE RETRY COUNT
|
||||
;
|
||||
; EQUATIONS OF INPUT OUTPUT PORT & ADDRESS
|
||||
;
|
||||
COMPRT EQU 0C4H ;COMMUNICATION PORT
|
||||
STATI EQU COMPRT ;INPUT STATUS
|
||||
DPRTI EQU COMPRT+1 ;DATA PORT
|
||||
MSKI EQU 01H ;INPUT READY BIT
|
||||
;
|
||||
STATO EQU COMPRT ;OUTPUT STATUS
|
||||
DPRTO EQU COMPRT+1 ;DATA PORT
|
||||
MSKO EQU 80H ;OUTPUT READY BIT
|
||||
;
|
||||
;
|
||||
CRTBF EQU 0F800H ;VRAM AREA
|
||||
CPORT EQU 40H ;PORT FOR BELL ON
|
||||
;
|
||||
;
|
||||
SUBTTL BOOTER PART
|
||||
;
|
||||
; SYSTEM PAGE
|
||||
; 2B:NDOS TOP
|
||||
; 2B:SNIOS TOP
|
||||
; 2B:BDOS TOP
|
||||
; 2B:BIOS TOP
|
||||
; 2B:LENGTH
|
||||
;
|
||||
;
|
||||
; ENTRY POINT & PARAMETERS
|
||||
;
|
||||
NBOOT:
|
||||
JMP START
|
||||
;
|
||||
; ID CODE FOR PATCH
|
||||
;
|
||||
MSTID: DB 0 ;MASTER ID CODE
|
||||
SLVID: DB 20H ;SLAVE ID CODE
|
||||
;
|
||||
; FCB FOR SYSTEM LOAD
|
||||
;
|
||||
FCB: DB 2 ;MASTER DISK NUMBER +1
|
||||
DB 'CPNETPC SYS' ;SYSTEM FILE NAME
|
||||
DB 0,0 ;EXTENT & CURRENT RECODE
|
||||
;
|
||||
; PASS WORD
|
||||
;
|
||||
PASSWD: DB 'PASSWORD' ;DEFAULT PASS WORD
|
||||
;
|
||||
;
|
||||
START:
|
||||
LXI SP,STACK
|
||||
CALL LOGIN ;LOG IN
|
||||
CALL SETUSR ;SET USER CODE TO ZERO
|
||||
CALL OPEN ;OPEN SYSTEM FILE
|
||||
LXI H,PARAMT
|
||||
SHLD DMAADD ;SET DMA ADDRESS TO WORK
|
||||
CALL READ ;READ PARAMETER PAGE
|
||||
LHLD PARAMT
|
||||
SHLD DMAADD ;GET LOADING TOP
|
||||
LXI D,3
|
||||
DAD D
|
||||
SHLD NDOSPT ;SAVE NDOS COLD START ENTRY
|
||||
LHLD PARAMT+2
|
||||
DAD D
|
||||
DAD D
|
||||
SHLD SNIOSP ;GET SNIOS ENTRY FOR CONFIGRATION TABLE
|
||||
LHLD PARAMT+4
|
||||
DAD D
|
||||
DAD D
|
||||
SHLD BDOSPT ;GET BDOS ENTRY
|
||||
LHLD PARAMT+6
|
||||
SHLD BIOSPT ;BIOS COLD START POINT
|
||||
LHLD PARAMT+8 ;GET SYSTEM LENGTH
|
||||
DAD H
|
||||
MOV A,H ;GET COUNT
|
||||
LOOP: ;SECTOR READ LOOP
|
||||
PUSH PSW ;SAVE COUNT
|
||||
CALL READ ;READ ONE SECTOR
|
||||
LHLD DMAADD
|
||||
LXI D,128
|
||||
DAD D
|
||||
SHLD DMAADD ;TO NEXT DMA ADDRESS
|
||||
POP PSW
|
||||
DCR A
|
||||
JNZ LOOP ;TO NEXT SECTOR
|
||||
MVI A,0C3H
|
||||
STA TOP
|
||||
STA TOP+5 ;SET JUMP INSTRUCTIONS
|
||||
LHLD BDOSPT
|
||||
SHLD TOP+6 ;SET BDOS ENTRY
|
||||
LHLD BIOSPT
|
||||
INX H
|
||||
INX H
|
||||
INX H
|
||||
SHLD TOP+1 ;SET WARM BOOT VECTOR
|
||||
LXI H,LOOPEN
|
||||
PUSH H
|
||||
LHLD SNIOSP ;GET ROUTINE POINT FOR CONFIGRATION TABLE
|
||||
PUSH H
|
||||
LHLD NDOSPT
|
||||
MOV B,H
|
||||
MOV C,L ;GET NDOS TOP
|
||||
LHLD BIOSPT
|
||||
PCHL ;TO BIOS INITIALIZE ROUTINE
|
||||
;
|
||||
LOOPEN:
|
||||
INX H
|
||||
LDA SLVID
|
||||
MOV M,A ;SET SLAVE ID
|
||||
LXI D,40
|
||||
DAD D
|
||||
MOV M,A ;SLAVE ID FOR LIST OUT
|
||||
LHLD NDOSPT
|
||||
PCHL ;TO NDOS COLD START POINT
|
||||
;
|
||||
; OPEN FILE
|
||||
;
|
||||
OPEN:
|
||||
XRA A
|
||||
STA FCB+12 ;CLEAR EXTENT
|
||||
STA FCB+13 ;CLEAR CURRENT RECODE
|
||||
CALL STFCBP ;SET FCB POINT
|
||||
LXI H,FCB
|
||||
MVI B,13
|
||||
CALL MCPYTO ;SET FCB DATA
|
||||
MVI C,COPEN
|
||||
CALL LINK ;LINK WITH MATSER
|
||||
CALL GTRPA ;GET RETURN PARAMETER
|
||||
INR A
|
||||
MVI A,'O'
|
||||
JZ LOADER ;OPEN ERROR
|
||||
RET
|
||||
;
|
||||
; READ ONE SECTNR
|
||||
;
|
||||
READ:
|
||||
CALL STFCBP
|
||||
CALL STEXCR ;SET EXTENT & CURRENT RECODE
|
||||
MVI C,CREAD
|
||||
CALL LINK
|
||||
CALL RSEXCR ;RESTORE EXTENT & CURRENT RECODE
|
||||
LHLD DMAADD ;DMA POINT
|
||||
MVI B,128
|
||||
CALL MCPYFR ;GET DAMA
|
||||
CALL GTRPA ;GET RETURN PARAMETER
|
||||
ORA A
|
||||
MVI A,'D'
|
||||
JNZ LOADER ;READ DATA ERROR
|
||||
RET
|
||||
;
|
||||
; LINK WITH MASTER
|
||||
; INPUT
|
||||
; C:FUNCTION
|
||||
;
|
||||
LINK:
|
||||
LXI H,MSGTOP
|
||||
MVI M,0 ;TO SEND
|
||||
INX H
|
||||
LDA MSTID
|
||||
MOV M,A
|
||||
INX H
|
||||
LDA SLVID
|
||||
MOV M,A ;SET SLAVE ID
|
||||
INX H
|
||||
MOV M,C ;SET FCUNTION
|
||||
INX H
|
||||
XCHG
|
||||
LHLD MCRPNT ;DATA POINT
|
||||
XRA A
|
||||
SUB E
|
||||
MOV C,A
|
||||
MVI A,0
|
||||
SBB D
|
||||
MOV B,A
|
||||
DAD B ;GET LENGTH
|
||||
DCX H
|
||||
DCX H
|
||||
XCHG
|
||||
MOV M,E ;SET SIZE
|
||||
LXI B,MSGTOP
|
||||
CALL SNDMSG
|
||||
INR A
|
||||
MVI A,'S'
|
||||
JZ LOADER ;SEND ERROR
|
||||
LXI B,MSGTOP
|
||||
CALL RCVMSG
|
||||
INR A
|
||||
MVI A,'R'
|
||||
JZ LOADER ;RECEIVE ERROR
|
||||
LXI H,MSGDAT
|
||||
SHLD MCRPNT ;INITIALIZE POINTER
|
||||
RET
|
||||
;
|
||||
; RESTORE EXTENT & CURRENT RECORD
|
||||
;
|
||||
RSEXCR:
|
||||
LHLD MCRPNT
|
||||
MOV A,M
|
||||
STA FCB+12 ;SET EXTENT
|
||||
INX H
|
||||
MOV A,M
|
||||
STA FCB+13 ;SET CURRENT RECODE
|
||||
INX H
|
||||
SHLD MCRPNT
|
||||
RET
|
||||
;
|
||||
; GET RETURN PARAMETER
|
||||
; OUTPUT
|
||||
; A:ONE BYTE PARAMETER SAME WITH L
|
||||
;
|
||||
GTRPA:
|
||||
LHLD MCRPNT
|
||||
MOV A,M ;GET PARAMETER
|
||||
RET
|
||||
;
|
||||
; SET EXTENT & CURRENT RECODE
|
||||
;
|
||||
STEXCR:
|
||||
LHLD MCRPNT
|
||||
LDA FCB+12 ;GET EXTENT
|
||||
MOV M,A
|
||||
INX H
|
||||
LDA FCB+13 ;GET CURRENT RECODE
|
||||
MOV M,A
|
||||
INX H
|
||||
SHLD MCRPNT
|
||||
RET
|
||||
;
|
||||
; SET FCB POINT
|
||||
;
|
||||
STFCBP:
|
||||
LXI H,MSGDAT
|
||||
LXI D,FCB
|
||||
MOV M,E
|
||||
INX H
|
||||
MOV M,D ;SET FCB POINT
|
||||
INX H
|
||||
SHLD MCRPNT ;SET POINTER
|
||||
RET
|
||||
;
|
||||
; MESSAGE COPY FROM MESSAGE BUFFER
|
||||
; INPUT
|
||||
; B:COUNT
|
||||
; HL:DESTINATION
|
||||
;
|
||||
MCPYFR:
|
||||
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
|
||||
; HL:SOURCE POINT
|
||||
;
|
||||
MCPYTO:
|
||||
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
|
||||
;
|
||||
; LOGIN
|
||||
;
|
||||
LOGIN:
|
||||
LXI H,MSGDAT
|
||||
SHLD MCRPNT ;SET POINTER TO TOP
|
||||
LXI H,PASSWD
|
||||
MVI B,8
|
||||
CALL MCPYTO ;SET PASSWORD
|
||||
MVI C,CLOGIN
|
||||
CALL LINK
|
||||
CALL GTRPA ;GET RESULT
|
||||
ORA A
|
||||
MVI A,'L'
|
||||
JNZ LOADER ;LOGIN ERROR
|
||||
RET
|
||||
;
|
||||
; SET USER CODE TO ZERO
|
||||
;
|
||||
SETUSR:
|
||||
LXI H,MSGDAT
|
||||
MVI M,0 ;SET USER CODE ZERO
|
||||
INX H
|
||||
SHLD MCRPNT ;SET DATA POINTER
|
||||
MVI C,CSTUSC
|
||||
JMP LINK
|
||||
;
|
||||
; LOAD ERROR
|
||||
; INPUT
|
||||
; A:ERROR CODE
|
||||
;
|
||||
LOADER:
|
||||
LXI D,CBOTER ;ERROR COMMENT POINT
|
||||
JMP FTEROR
|
||||
;
|
||||
;
|
||||
SUBTTL COMMUNICATION PART
|
||||
;
|
||||
; FATAL ERROR END STOP
|
||||
; INPUT
|
||||
; DE:ERROR STRING POINTER
|
||||
; A:ERROR CODE
|
||||
;
|
||||
FTEROR:
|
||||
DI
|
||||
MOV C,A
|
||||
LXI H,CRTBF+50
|
||||
INX H
|
||||
INX D
|
||||
LDAX D
|
||||
MOV M,A
|
||||
ORA A
|
||||
JNZ $-5 ;TO NEXT CODE
|
||||
MOV M,C ;SET ERROR CODE
|
||||
MVI A,20H
|
||||
OUT CPORT ;BELL ON
|
||||
JMP $
|
||||
;
|
||||
; SEND MESSAGE ON NETWORK
|
||||
; INPUT
|
||||
; BC:MESSAGE ADDRESS
|
||||
;
|
||||
SNDMSG:
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
SHLD MSGADR ;SAVE MESSAGE ADDRESS
|
||||
SNDMSR: ;RETRY LOOP
|
||||
MVI A,MAXRTY
|
||||
STA RTYCNT ;INITIALIE RETRY COUNT
|
||||
SEND:
|
||||
CALL NTRSET ;RESET BUFFER
|
||||
SENDS:
|
||||
LHLD MSGADR ;GET MESSAGE TOP
|
||||
MVI D,TMORTY ;TIME OUT RETRY COUNT
|
||||
SENDWT: ;ENQUIRE RESPONSE WAIT LOOP
|
||||
MVI C,ENQ
|
||||
CALL CHROUT ;SEND ENQUIRE TO MASTER
|
||||
CALL CHARIN ;WAIT RESPONSE
|
||||
JNC SENDGT ;GET RESPONSE
|
||||
DCR D ;TIME OVER
|
||||
JNZ SENDWT ;SEND ENQUIRE ONCE MORE
|
||||
JMP CHINTO ;TIME OVER FOR LINK
|
||||
;
|
||||
SENDGT: ;GET RESPONSE
|
||||
CPI ENQ ;CHECK SEND - SEND MODE
|
||||
JZ SNDRCV ;CRASH SEND SO TO PASS RECEIVE MODE
|
||||
CALL GETAK0 ;GET RESPONSE OF ENQ
|
||||
MVI C,SOH
|
||||
MVI E,5 ;HEADER LENGTH COUNT
|
||||
CALL MSGOUT ;SEND SOH,FMT,DID,SID,FNC,SIZ
|
||||
XRA A
|
||||
SUB D
|
||||
MOV C,A
|
||||
CALL NETOUT ;SEND HCS (HEADER CHECK SUM)
|
||||
CALL CHARIW ;GET RESPONSE
|
||||
JC GETATS ;TIME OVER
|
||||
CPI ACK
|
||||
JNZ $+9 ;NORMAL MODE
|
||||
CALL CHARIW ;MAYBE BUFFER LEFT ACK, SO IGNORE
|
||||
JC GETATS ;TIME OVER
|
||||
SUI ACKS
|
||||
JNZ GETATS ;MISS MATCH OF RESPONSE
|
||||
DCX H
|
||||
MOV E,M
|
||||
INX H
|
||||
INR E
|
||||
MVI C,STX
|
||||
CALL MSGOUT ;SEND STX,DB0,DB1,....
|
||||
MVI C,ETX
|
||||
CALL NETOUT ;SEND ETX
|
||||
XRA A
|
||||
SUB D
|
||||
MOV C,A
|
||||
CALL NETOUT ;SEND DATA CHECK SUM
|
||||
MVI C,EOT
|
||||
CALL CHROUT ;SEND END OF TRNASMISSION
|
||||
CALL GETAKS ;********NEED CALL ******* FOR ERROR RETRY
|
||||
RET
|
||||
;
|
||||
; PASS RECEIVE FOR SEND & SEND MODE
|
||||
;
|
||||
SNDRCV:
|
||||
CALL NTRSET ;CLEAR CURRENT BUFFER
|
||||
MVI D,TMORTY
|
||||
SNDRCW: ;WAIT FOR ANOTHER ENQ
|
||||
CALL CHARIN
|
||||
JNC SNDRCG ;GET DATA
|
||||
DCR D ;TIME OVER
|
||||
JNZ SNDRCW ;WAIT
|
||||
JMP SEND ;MAYBE MISS LINK, SO TO SEND
|
||||
;
|
||||
SNDRCG: ;GET DATA
|
||||
CPI ENQ
|
||||
JNZ SEND ;MAYBE MISS LINK
|
||||
LXI H,SNDRCV
|
||||
PUSH H ;SAVE RETRY LOOP
|
||||
CALL SNDACK ;SEND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
RC ;NO RESPONSE, SO RETRY
|
||||
CPI SOH
|
||||
RNZ
|
||||
LXI H,DHEADR ;DUMMY HEADER BUFFER
|
||||
MOV D,A
|
||||
MVI E,5
|
||||
CALL MSGIN ;GET HEADER
|
||||
CNC NETIN ;GET CHECK SUM
|
||||
RC ;TIME OUT RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW
|
||||
RC
|
||||
CPI STX ;CHECK START OF TEXT
|
||||
RNZ ;RETRY
|
||||
MOV D,A ;INITIALIZE CHECK SUM
|
||||
DCX H
|
||||
MOV E,M
|
||||
INR E
|
||||
INR E ;GET COUNT FOR READ
|
||||
SNDRCL: ;DATA PASS RECEIVE LOOP
|
||||
CALL NETIN ;GET ONE DATA
|
||||
RC ;TIME OUT RETRY
|
||||
DCR E
|
||||
JNZ SNDRCL ;TO NEXT DATA
|
||||
CPI ETX
|
||||
RNZ ;MISS MATCH OF END CODE
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
RC
|
||||
CALL CHARIN
|
||||
RC
|
||||
CPI EOT ;END OF TRANSMISSION
|
||||
RNZ
|
||||
MOV A,D
|
||||
ORA A
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS
|
||||
POP H
|
||||
JMP SENDS
|
||||
;
|
||||
; GET ACKNOWLEDGE
|
||||
; OVERRIDING RETURN WHEN ERROR
|
||||
;
|
||||
GETAK0: ;CHECK ACKNOWLEDGE
|
||||
SUI ACK
|
||||
RZ
|
||||
SNDRTY:
|
||||
POP H ;DISCARD RETURN ADDRESS
|
||||
GETATS: ;TIME OVER RETRY
|
||||
LXI H,RTYCNT
|
||||
DCR M
|
||||
JNZ SEND ;SEND AGAIN
|
||||
CHINTO: ;CHARACTER IN TIME OUT
|
||||
MVI A,-1
|
||||
RET
|
||||
;
|
||||
GETAKS: ;GET SECOND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
JC SNDRTY ;TIME OUT
|
||||
SUI ACKS
|
||||
RZ ;OK
|
||||
JMP SNDRTY ;RETRY
|
||||
;
|
||||
; RECEIVE MESSAGE FROM NETWORK
|
||||
; INPUT
|
||||
; BC:MESSAGE ADDRESS
|
||||
;
|
||||
RCVMSG:
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
SHLD MSGADR ;SAVE MESSAGE ADDRESS
|
||||
RCVMSR:
|
||||
MVI A,MAXRTY
|
||||
STA RTYCNT ;INITIALIZE RETRY COUNT
|
||||
RECALL:
|
||||
CALL RECEIV
|
||||
LXI H,RTYCNT ;RETURN FROM RECEIV IS ERROR
|
||||
DCR M
|
||||
JNZ RECALL ;RETRY
|
||||
RCVTOT: ;TIME OUT
|
||||
MVI A,-1
|
||||
RET
|
||||
;
|
||||
; RECEIVE BODDY
|
||||
; RETURN OVERRIDING WHEN OK
|
||||
; SIMPLE RETURN IS ERROR
|
||||
;
|
||||
RECEIV:
|
||||
LHLD MSGADR ;GET MESSAGE ADDRESS
|
||||
MVI D,TMORTY
|
||||
CALL NTRSET ;RESET INPUT BUFFER
|
||||
RCVFST: ;RECEIVE FIRST CHARACTER LOOP
|
||||
CALL CHARIN
|
||||
JNC RCVGFS ;GET FIRST CHARACTER
|
||||
DCR D ;TIME OVER
|
||||
JNZ RCVFST ;RETRY
|
||||
POP H
|
||||
JMP RCVTOT ;SET TIME OVER ERROR FLAG & RETRY
|
||||
;
|
||||
RCVGFS: ;GET FIRST CHARACTER
|
||||
CPI ENQ
|
||||
JNZ RECEIV ;NOT ENQUIRE SO RETRY
|
||||
CALL SNDACK ;RESPONSE TO MASTER
|
||||
CALL CHARIW
|
||||
RC ;RETURN TO RECEIVE RETRY
|
||||
CPI SOH
|
||||
RNZ ;NOT START OF HEADER
|
||||
MOV D,A ;START OF HEADER
|
||||
MVI E,5 ;LENGTH OF HEADER
|
||||
CALL MSGIN ;GET HEADER BLOCK
|
||||
CNC NETIN ;GET HCS (HEADER CHECK SUM)
|
||||
RC ;TIME OVER RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW ;WAIT DATA TOP
|
||||
RC
|
||||
CPI STX
|
||||
RNZ ;NOT START OF TEXT
|
||||
MOV D,A ;START OF TEXT
|
||||
DCX H
|
||||
MOV E,M ;GET SIZE
|
||||
INX H
|
||||
INR E ;MAKE READ COUNT FOR DATA BLOCK
|
||||
CALL MSGIN ;RECEIVE DATA
|
||||
RC
|
||||
CALL CHARIN ;GET END CODE OF DATA BLOCK
|
||||
RC
|
||||
CPI ETX
|
||||
RNZ ;NOT END OF TEXT SO RETRY
|
||||
ADD D
|
||||
MOV D,A
|
||||
CALL NETIN ;GET HEADER CHECK SUM
|
||||
RC
|
||||
CALL CHARIN ;GET LAST CODE
|
||||
RC
|
||||
CPI EOT
|
||||
RNZ ;NOT END OF TRANSMIT SO ERROR
|
||||
MOV A,D
|
||||
ORA A
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
POP H ;OK ALL PACKETTE IS RECEIVED
|
||||
LHLD MSGADR
|
||||
INX H
|
||||
LDA SLVID ;GET SLAVE ID
|
||||
SUB M ;CHECK SID
|
||||
JZ $+5
|
||||
MVI A,-1 ;SID ERROR
|
||||
PUSH PSW
|
||||
CALL SNDAKS ;SEND ACKNOWLEDGE
|
||||
POP PSW
|
||||
RET
|
||||
;
|
||||
; ROUTINES TO SEND RESPONSE CODES
|
||||
;
|
||||
SNDACK: ;SEND ACKNOWLEDGE
|
||||
MVI C,ACK
|
||||
JMP CHROUT
|
||||
;
|
||||
SNDAKS: ;SEND SECOND ACKNOWLEDGE
|
||||
MVI C,ACKS
|
||||
JMP CHROUT
|
||||
;
|
||||
SNDNAK: ;SEND NEGATIVE ACKNOWLEDGE
|
||||
MVI C,NAK
|
||||
JMP CHROUT
|
||||
;
|
||||
; NETWORK ERROR RECOVER ROUTINE RESET COMMUNICATION INTERFACE
|
||||
;
|
||||
NTRSET:
|
||||
MVI A,080H
|
||||
OUT STATO ;RESET
|
||||
RET
|
||||
;
|
||||
; NETWORK OUTPUT DATA
|
||||
; INPUT
|
||||
; C:OUTPUT DATA
|
||||
; D:CHECK SUM
|
||||
;
|
||||
NETOUT:
|
||||
MOV A,D
|
||||
ADD C
|
||||
MOV D,A ;MAKE CHECK SUM
|
||||
CHROUT:
|
||||
IN STATO
|
||||
ANI MSKO ;GET OUTPUT READY MODE
|
||||
JNZ CHROUT ;NOT READY
|
||||
MOV A,C
|
||||
OUT DPRTO ;OUT DATA
|
||||
RET
|
||||
;
|
||||
; INPUT FROM NETWORK
|
||||
; OUTPUT
|
||||
; A:DATA
|
||||
; CF:ON TIME OVER OFF GET DATA
|
||||
;
|
||||
CHARIW: ;LONG WAIT
|
||||
MVI B,0
|
||||
JMP CHARIM
|
||||
;
|
||||
CHARIN:
|
||||
MVI B,10 ;10 MS = 192 CH / 192K BAUD
|
||||
CHARIM: ;WAIT LOOP
|
||||
MVI C,5AH ;1 MS WAIT VALUE
|
||||
CHARIL: ;1 MS WAIT LOOP
|
||||
IN STATI
|
||||
ANI MSKI
|
||||
JZ CHARIG ;READY
|
||||
DCR C
|
||||
JNZ CHARIL ;WAIT OF 1 MS
|
||||
DCR B
|
||||
JNZ CHARIM ;WAIT
|
||||
STC ;TIME OVER RETURN
|
||||
RET
|
||||
;
|
||||
CHARIG:
|
||||
IN DPRTI ;GET DATA
|
||||
RET
|
||||
;
|
||||
; MESSAGE INPUT
|
||||
; INPUT
|
||||
; HL:DESTINATION ADDRESS
|
||||
; E:INPUT COUNT
|
||||
;
|
||||
MSGIN:
|
||||
CALL NETIN
|
||||
RC ;TIME OUT
|
||||
MOV M,A ;GET DATA
|
||||
INX H
|
||||
DCR E
|
||||
JNZ MSGIN ;TO NEXT BYTE
|
||||
RET
|
||||
;
|
||||
; NETWORK INPUT
|
||||
; INPUT
|
||||
; D:CHECK SUM
|
||||
; OUTPUT
|
||||
; A:DATA
|
||||
;
|
||||
NETIN:
|
||||
CALL CHARIN ;RECEIVE BYTE IN BINARY MODE
|
||||
RC
|
||||
MOV B,A
|
||||
ADD D ;MAKE CHECK SUM
|
||||
MOV D,A
|
||||
ORA A ;OFF CARRY FLAG
|
||||
MOV A,B
|
||||
RET
|
||||
;
|
||||
; MESSAGE OUT
|
||||
; INPUT
|
||||
; HL:SOURCE ADDRESS
|
||||
; E:COUNT OF OUTPUT DATA
|
||||
; C:PREAMBLE CODE
|
||||
;
|
||||
MSGOUT:
|
||||
MVI D,0 ;CLEAR CHECK SUM
|
||||
CALL NETOUT ;OUT PREAMBLE CODE
|
||||
MSGOTL: ;OUT LOOP
|
||||
MOV C,M ;GET CODE
|
||||
INX H
|
||||
CALL NETOUT ;OUT DATA
|
||||
DCR E
|
||||
JNZ MSGOTL ;TO NEXT DATA
|
||||
RET
|
||||
;
|
||||
;
|
||||
CBOTER: DB ' LOAD ERROR ',0
|
||||
;
|
||||
; WORKING AREA
|
||||
; FOR BOOT
|
||||
;
|
||||
DMAADD: DS 2 ;DMA ADDRESS
|
||||
NDOSPT: DS 2 ;NDOS COLD START POINT
|
||||
SNIOSP: DS 2 ;SNIOS ENTRY FOR CONFIGRATION TABLE
|
||||
BDOSPT: DS 2 ;BDOS ENTRY POINT
|
||||
BIOSPT: DS 2 ;BIOS COLD START POINT
|
||||
;
|
||||
MCRPNT: DS 2 ;MESSAGE POINTER
|
||||
;
|
||||
; MESSAGE AREA
|
||||
;
|
||||
MSGTOP: DS 5 ;HEADER
|
||||
MSGDAT: DS 2 ;DATA
|
||||
PARAMT: DS 128 ;DATA OF ONE SECTOR
|
||||
DS 1
|
||||
;
|
||||
DS 64
|
||||
STACK:
|
||||
;
|
||||
; DATA AREA FOR SEND & RECEIVE
|
||||
;
|
||||
MSGADR: DS 2 ;MESSSAGE ADDRESS BUFFER
|
||||
DHEADR: DS 5 ;DUMMY HEADER BUFFER
|
||||
RTYCNT: DB 0 ;RETRY COUNT
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
1501
CP-NET/CPNET-80 SOURCE/NDOS.MAC
Normal file
1501
CP-NET/CPNET-80 SOURCE/NDOS.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1581
CP-NET/CPNET-80 SOURCE/NDOSS.MAC
Normal file
1581
CP-NET/CPNET-80 SOURCE/NDOSS.MAC
Normal file
File diff suppressed because it is too large
Load Diff
490
CP-NET/CPNET-80 SOURCE/NNIOS.MAC
Normal file
490
CP-NET/CPNET-80 SOURCE/NNIOS.MAC
Normal file
@@ -0,0 +1,490 @@
|
||||
; SLAVE NETWORK INPUT OUTPUT SYSTEM
|
||||
; FOR NOS MODE
|
||||
;
|
||||
TITLE SLAVE NETWORK INPUT OUTPUT SYSTEM FOR NOS
|
||||
;
|
||||
; EQUATIONS OF SLAVE PROCESSOR ID CODE
|
||||
;
|
||||
SLVID EQU 20H
|
||||
;
|
||||
; 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 5 ;BDOS ENTRY ADDRESS
|
||||
;
|
||||
COMPRT EQU 0C4H ;COMMUNICATION PORT
|
||||
STATI EQU COMPRT ;INPUT STATUS
|
||||
DPRTI EQU COMPRT+1 ;DATA PORT
|
||||
MSKI EQU 01H ;INPUT READY BIT
|
||||
;
|
||||
STATO EQU COMPRT ;OUTPUT STATUS
|
||||
DPRTO EQU COMPRT+1 ;DATA PORT
|
||||
MSKO EQU 80H ;OUTPUT READY BIT
|
||||
;
|
||||
; 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
|
||||
;
|
||||
; SLAVE CONFIGRATION TABLE
|
||||
;
|
||||
CNFTBL:
|
||||
DB 0 ;NETWORK STATUS BYTE
|
||||
DB SLVID ;SLAVE PROCESSOR ID
|
||||
DB 81H,0 ;A: HOME DISK IS B: OF MASTER 0
|
||||
DB 80H,0 ;B: A: OF MASTER 0
|
||||
DB 82H,0 ;C: C: OF MASTER 0
|
||||
DB 83H,0 ;D: D: OF MASTER 0
|
||||
DB 84H,0 ;E: E: OF MASTER 0
|
||||
DB 0,0 ;F: NO DEVICE
|
||||
DB 0,0 ;G: NO DEVICE
|
||||
DB 0,0 ;H: NO DEVICE
|
||||
DB 0,0 ;I: NO DEVICE
|
||||
DB 0,0 ;J: NO DEVICE
|
||||
DB 0,0 ;K: NO DEVICE
|
||||
DB 0,0 ;L: NO DEVICE
|
||||
DB 0,0 ;M: NO DEVICE
|
||||
DB 0,0 ;N: NO DEVICE
|
||||
DB 0,0 ;O: NO DEVICE
|
||||
DB 0,0 ;P: NO DEVICE
|
||||
;
|
||||
DB 0,0 ;CONSOLE DEVICE
|
||||
;
|
||||
DB 0,0 ;LIST DEVICE
|
||||
DB 0 ;BUFFER INDEX
|
||||
;
|
||||
DB 0 ;FMT MESSAGE BUFFER FOR LISTER
|
||||
DB 0 ;DID
|
||||
DB SLVID ;SID
|
||||
DB 5 ;FNC LIST OUT
|
||||
DB 0 ;SIZ
|
||||
DS 1 ;MESSAGE 0 LISTER NUMBER
|
||||
DS 128 ;MESSAGE 1 - 128 OUTPUT DATA
|
||||
;
|
||||
; INITIALIZE NETWROK
|
||||
;
|
||||
NTWKIN:
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
XRA A ;RETURN CODE 0 IS SUCCESS END
|
||||
RET
|
||||
;
|
||||
; OUTPUT STATUS OF NETWORK
|
||||
;
|
||||
NTWKST:
|
||||
LDA CNFTBL ;GET NETWORK STATUS
|
||||
MOV B,A
|
||||
ANI NOT (RCVERR+SNDERR)
|
||||
STA CNFTBL ;OFF ERROR BITS
|
||||
MOV A,B
|
||||
RET
|
||||
;
|
||||
; RETURN CONFIGRATION TABLE ADDRESS
|
||||
;
|
||||
CNTBAD:
|
||||
LXI H,CNFTBL
|
||||
RET
|
||||
;
|
||||
; SEND MESSAGE ON NETWORK
|
||||
; INPUT
|
||||
; BC:MESSAGE ADDRESS
|
||||
;
|
||||
SNDMSG:
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
SHLD MSGADR ;SAVE MESSAGE ADDRESS
|
||||
SNDMSR: ;RETRY LOOP
|
||||
MVI A,MAXRTY
|
||||
STA RTYCNT ;INITIALIE RETRY COUNT
|
||||
SEND:
|
||||
CALL NTRSET ;RESET BUFFER
|
||||
SENDS:
|
||||
LHLD MSGADR ;GET MESSAGE TOP
|
||||
MVI D,TMORTY ;TIME OUT RETRY COUNT
|
||||
SENDWT: ;ENQUIRE RESPONSE WAIT LOOP
|
||||
MVI C,ENQ
|
||||
CALL CHROUT ;SEND ENQUIRE TO MASTER
|
||||
CALL CHARIN ;WAIT RESPONSE
|
||||
JNC SENDGT ;GET RESPONSE
|
||||
DCR D ;TIME OVER
|
||||
JNZ SENDWT ;SEND ENQUIRE ONCE MORE
|
||||
JMP CHINTO ;TIME OVER FOR LINK
|
||||
;
|
||||
SENDGT: ;GET RESPONSE
|
||||
CPI ENQ ;CHECK SEND - SEND MODE
|
||||
JZ SNDRCV ;CRASH SEND SO TO PASS RECEIVE MODE
|
||||
CALL GETAK0 ;GET RESPONSE OF ENQ
|
||||
MVI C,SOH
|
||||
MVI E,5 ;HEADER LENGTH COUNT
|
||||
CALL MSGOUT ;SEND SOH,FMT,DID,SID,FNC,SIZ
|
||||
XRA A
|
||||
SUB D
|
||||
MOV C,A
|
||||
CALL NETOUT ;SEND HCS (HEADER CHECK SUM)
|
||||
CALL CHARIW ;GET RESPONSE
|
||||
JC GETATS ;TIME OVER
|
||||
CPI ACK
|
||||
JNZ $+9 ;NORMAL MODE
|
||||
CALL CHARIW ;MAYBE BUFFER LEFT ACK, SO IGNORE
|
||||
JC GETATS ;TIME OVER
|
||||
SUI ACKS
|
||||
JNZ GETATS ;MISS MATCH OF RESPONSE
|
||||
DCX H
|
||||
MOV E,M
|
||||
INX H
|
||||
INR E
|
||||
MVI C,STX
|
||||
CALL MSGOUT ;SEND STX,DB0,DB1,....
|
||||
MVI C,ETX
|
||||
CALL NETOUT ;SEND ETX
|
||||
XRA A
|
||||
SUB D
|
||||
MOV C,A
|
||||
CALL NETOUT ;SEND DATA CHECK SUM
|
||||
MVI C,EOT
|
||||
CALL CHROUT ;SEND END OF TRNASMISSION
|
||||
CALL GETAKS ;********NEED CALL ******* FOR ERROR RETRY
|
||||
RET
|
||||
;
|
||||
; PASS RECEIVE FOR SEND & SEND MODE
|
||||
;
|
||||
SNDRCV:
|
||||
CALL NTRSET ;CLEAR CURRENT BUFFER
|
||||
MVI D,TMORTY
|
||||
SNDRCW: ;WAIT FOR ANOTHER ENQ
|
||||
CALL CHARIN
|
||||
JNC SNDRCG ;GET DATA
|
||||
DCR D ;TIME OVER
|
||||
JNZ SNDRCW ;WAIT
|
||||
JMP SEND ;MAYBE MISS LINK, SO TO SEND
|
||||
;
|
||||
SNDRCG: ;GET DATA
|
||||
CPI ENQ
|
||||
JNZ SEND ;MAYBE MISS LINK
|
||||
LXI H,SNDRCV
|
||||
PUSH H ;SAVE RETRY LOOP
|
||||
CALL SNDACK ;SEND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
RC ;NO RESPONSE, SO RETRY
|
||||
CPI SOH
|
||||
RNZ
|
||||
LXI H,DHEADR ;DUMMY HEADER BUFFER
|
||||
MOV D,A
|
||||
MVI E,5
|
||||
CALL MSGIN ;GET HEADER
|
||||
CNC NETIN ;GET CHECK SUM
|
||||
RC ;TIME OUT RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW
|
||||
RC
|
||||
CPI STX ;CHECK START OF TEXT
|
||||
RNZ ;RETRY
|
||||
MOV D,A ;INITIALIZE CHECK SUM
|
||||
DCX H
|
||||
MOV E,M
|
||||
INR E
|
||||
INR E ;GET COUNT FOR READ
|
||||
SNDRCL: ;DATA PASS RECEIVE LOOP
|
||||
CALL NETIN ;GET ONE DATA
|
||||
RC ;TIME OUT RETRY
|
||||
DCR E
|
||||
JNZ SNDRCL ;TO NEXT DATA
|
||||
CPI ETX
|
||||
RNZ ;MISS MATCH OF END CODE
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
RC
|
||||
CALL CHARIN
|
||||
RC
|
||||
CPI EOT ;END OF TRANSMISSION
|
||||
RNZ
|
||||
MOV A,D
|
||||
ORA A
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS
|
||||
POP H
|
||||
JMP SENDS
|
||||
;
|
||||
; GET ACKNOWLEDGE
|
||||
; OVERRIDING RETURN WHEN ERROR
|
||||
;
|
||||
GETAK0: ;CHECK ACKNOWLEDGE
|
||||
SUI ACK
|
||||
RZ
|
||||
SNDRTY:
|
||||
POP H ;DISCARD RETURN ADDRESS
|
||||
GETATS: ;TIME OVER RETRY
|
||||
LXI H,RTYCNT
|
||||
DCR M
|
||||
JNZ SEND ;SEND AGAIN
|
||||
CHINTO: ;CHARACTER IN TIME OUT
|
||||
MVI A,SNDERR
|
||||
CALL ERETRN
|
||||
JMP SNDMSR
|
||||
;
|
||||
GETAKS: ;GET SECOND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
JC SNDRTY ;TIME OUT
|
||||
SUI ACKS
|
||||
RZ ;OK
|
||||
JMP SNDRTY ;RETRY
|
||||
;
|
||||
; RECEIVE MESSAGE FROM NETWORK
|
||||
; INPUT
|
||||
; BC:MESSAGE ADDRESS
|
||||
;
|
||||
RCVMSG:
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
SHLD MSGADR ;SAVE MESSAGE ADDRESS
|
||||
RCVMSR:
|
||||
MVI A,MAXRTY
|
||||
STA RTYCNT ;INITIALIZE RETRY COUNT
|
||||
RECALL:
|
||||
CALL RECEIV
|
||||
LXI H,RTYCNT ;RETURN FROM RECEIV IS ERROR
|
||||
DCR M
|
||||
JNZ RECALL ;RETRY
|
||||
RCVTOT: ;TIME OUT
|
||||
MVI A,RCVERR
|
||||
CALL ERETRN
|
||||
JMP RCVMSR
|
||||
;
|
||||
; RECEIVE BODDY
|
||||
; RETURN OVERRIDING WHEN OK
|
||||
; SIMPLE RETURN IS ERROR
|
||||
;
|
||||
RECEIV:
|
||||
LHLD MSGADR ;GET MESSAGE ADDRESS
|
||||
MVI D,TMORTY
|
||||
CALL NTRSET ;RESET INPUT BUFFER
|
||||
RCVFST: ;RECEIVE FIRST CHARACTER LOOP
|
||||
CALL CHARIN
|
||||
JNC RCVGFS ;GET FIRST CHARACTER
|
||||
DCR D ;TIME OVER
|
||||
JNZ RCVFST ;RETRY
|
||||
POP H
|
||||
JMP RCVTOT ;SET TIME OVER ERROR FLAG & RETRY
|
||||
;
|
||||
RCVGFS: ;GET FIRST CHARACTER
|
||||
CPI ENQ
|
||||
JNZ RECEIV ;NOT ENQUIRE SO RETRY
|
||||
CALL SNDACK ;RESPONSE TO MASTER
|
||||
CALL CHARIW
|
||||
RC ;RETURN TO RECEIVE RETRY
|
||||
CPI SOH
|
||||
RNZ ;NOT START OF HEADER
|
||||
MOV D,A ;START OF HEADER
|
||||
MVI E,5 ;LENGTH OF HEADER
|
||||
CALL MSGIN ;GET HEADER BLOCK
|
||||
CNC NETIN ;GET HCS (HEADER CHECK SUM)
|
||||
RC ;TIME OVER RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW ;WAIT DATA TOP
|
||||
RC
|
||||
CPI STX
|
||||
RNZ ;NOT START OF TEXT
|
||||
MOV D,A ;START OF TEXT
|
||||
DCX H
|
||||
MOV E,M ;GET SIZE
|
||||
INX H
|
||||
INR E ;MAKE READ COUNT FOR DATA BLOCK
|
||||
CALL MSGIN ;RECEIVE DATA
|
||||
RC
|
||||
CALL CHARIN ;GET END CODE OF DATA BLOCK
|
||||
RC
|
||||
CPI ETX
|
||||
RNZ ;NOT END OF TEXT SO RETRY
|
||||
ADD D
|
||||
MOV D,A
|
||||
CALL NETIN ;GET HEADER CHECK SUM
|
||||
RC
|
||||
CALL CHARIN ;GET LAST CODE
|
||||
RC
|
||||
CPI EOT
|
||||
RNZ ;NOT END OF TRANSMIT SO ERROR
|
||||
MOV A,D
|
||||
ORA A
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
POP H ;OK ALL PACKETTE IS RECEIVED
|
||||
LHLD MSGADR
|
||||
INX H
|
||||
LDA CNFTBL+1 ;GET SLAVE ID
|
||||
SUB M ;CHECK SID
|
||||
JZ $+5
|
||||
MVI A,-1 ;SID ERROR
|
||||
PUSH PSW
|
||||
CALL SNDAKS ;SEND ACKNOWLEDGE
|
||||
POP PSW
|
||||
RET
|
||||
;
|
||||
; ROUTINES TO SEND RESPONSE CODES
|
||||
;
|
||||
SNDACK: ;SEND ACKNOWLEDGE
|
||||
MVI C,ACK
|
||||
JMP CHROUT
|
||||
;
|
||||
SNDAKS: ;SEND SECOND ACKNOWLEDGE
|
||||
MVI C,ACKS
|
||||
JMP CHROUT
|
||||
;
|
||||
SNDNAK: ;SEND NEGATIVE ACKNOWLEDGE
|
||||
MVI C,NAK
|
||||
JMP CHROUT
|
||||
;
|
||||
; ERROR RETURN
|
||||
; INPUT
|
||||
; A:ERROR BIT
|
||||
; OUTPUT
|
||||
; A:-1
|
||||
;
|
||||
ERETRN:
|
||||
LXI H,CNFTBL
|
||||
ORA M ;ON ERROR BIT
|
||||
MOV M,A
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
MVI A,-1 ;ERROR RETUNR CODE
|
||||
RET
|
||||
;
|
||||
; NETWORK ERROR RECOVER ROUTINE RESET COMMUNICATION INTERFACE
|
||||
;
|
||||
NTRSET:
|
||||
MVI A,080H
|
||||
OUT STATO ;RESET
|
||||
RET
|
||||
;
|
||||
; BOOTING UP ROUTINE
|
||||
;
|
||||
NTWKWB:
|
||||
JMP NTRSET ;RESET INTERFACE
|
||||
;
|
||||
; NETWORK OUTPUT DATA
|
||||
; INPUT
|
||||
; C:OUTPUT DATA
|
||||
; D:CHECK SUM
|
||||
;
|
||||
NETOUT:
|
||||
MOV A,D
|
||||
ADD C
|
||||
MOV D,A ;MAKE CHECK SUM
|
||||
CHROUT:
|
||||
IN STATO
|
||||
ANI MSKO ;GET OUTPUT READY MODE
|
||||
JNZ CHROUT ;NOT READY
|
||||
MOV A,C
|
||||
OUT DPRTO ;OUT DATA
|
||||
RET
|
||||
;
|
||||
; INPUT FROM NETWORK
|
||||
; OUTPUT
|
||||
; A:DATA
|
||||
; CF:ON TIME OVER OFF GET DATA
|
||||
;
|
||||
CHARIW: ;LONG WAIT
|
||||
MVI B,0
|
||||
JMP CHARIM
|
||||
;
|
||||
CHARIN:
|
||||
MVI B,10 ;10 MS = 192 CH / 192K BAUD
|
||||
CHARIM: ;WAIT LOOP
|
||||
MVI C,5AH ;1 MS WAIT VALUE
|
||||
CHARIL: ;1 MS WAIT LOOP
|
||||
IN STATI
|
||||
ANI MSKI
|
||||
JZ CHARIG ;READY
|
||||
DCR C
|
||||
JNZ CHARIL ;WAIT OF 1 MS
|
||||
DCR B
|
||||
JNZ CHARIM ;WAIT
|
||||
STC ;TIME OVER RETURN
|
||||
RET
|
||||
;
|
||||
CHARIG:
|
||||
IN DPRTI ;GET DATA
|
||||
RET
|
||||
;
|
||||
; MESSAGE INPUT
|
||||
; INPUT
|
||||
; HL:DESTINATION ADDRESS
|
||||
; E:INPUT COUNT
|
||||
;
|
||||
MSGIN:
|
||||
CALL NETIN
|
||||
RC ;TIME OUT
|
||||
MOV M,A ;GET DATA
|
||||
INX H
|
||||
DCR E
|
||||
JNZ MSGIN ;TO NEXT BYTE
|
||||
RET
|
||||
;
|
||||
; NETWORK INPUT
|
||||
; INPUT
|
||||
; D:CHECK SUM
|
||||
; OUTPUT
|
||||
; A:DATA
|
||||
;
|
||||
NETIN:
|
||||
CALL CHARIN ;RECEIVE BYTE IN BINARY MODE
|
||||
RC
|
||||
MOV B,A
|
||||
ADD D ;MAKE CHECK SUM
|
||||
MOV D,A
|
||||
ORA A ;OFF CARRY FLAG
|
||||
MOV A,B
|
||||
RET
|
||||
;
|
||||
; MESSAGE OUT
|
||||
; INPUT
|
||||
; HL:SOURCE ADDRESS
|
||||
; E:COUNT OF OUTPUT DATA
|
||||
; C:PREAMBLE CODE
|
||||
;
|
||||
MSGOUT:
|
||||
MVI D,0 ;CLEAR CHECK SUM
|
||||
CALL NETOUT ;OUT PREAMBLE CODE
|
||||
MSGOTL: ;OUT LOOP
|
||||
MOV C,M ;GET CODE
|
||||
INX H
|
||||
CALL NETOUT ;OUT DATA
|
||||
DCR E
|
||||
JNZ MSGOTL ;TO NEXT DATA
|
||||
RET
|
||||
;
|
||||
; DATA AREA
|
||||
;
|
||||
MSGADR: DS 2 ;MESSSAGE ADDRESS BUFFER
|
||||
DHEADR: DS 5 ;DUMMY HEADER BUFFER
|
||||
RTYCNT: DB 0 ;RETRY COUNT
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
1
CP-NET/CPNET-80 SOURCE/README.MARKDOWN
Normal file
1
CP-NET/CPNET-80 SOURCE/README.MARKDOWN
Normal file
@@ -0,0 +1 @@
|
||||
Here is the source for CP/NET for the 8080/Z80. This is a disassembly, but looks well commented.
|
||||
3565
CP-NET/CPNET-80 SOURCE/SLVSP.MAC
Normal file
3565
CP-NET/CPNET-80 SOURCE/SLVSP.MAC
Normal file
File diff suppressed because it is too large
Load Diff
489
CP-NET/CPNET-80 SOURCE/SNIOS.MAC
Normal file
489
CP-NET/CPNET-80 SOURCE/SNIOS.MAC
Normal file
@@ -0,0 +1,489 @@
|
||||
; SLAVE NETWORK INPUT OUTPUT SYSTEM
|
||||
;
|
||||
TITLE 'SLAVE NETWORK INPUT OUTPUT SYSTEM'
|
||||
;
|
||||
; 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 5 ;BDOS ENTRY ADDRESS
|
||||
;
|
||||
COMPRT EQU 0C4H ;COMMUNICATION PORT
|
||||
STATI EQU COMPRT ;INPUT STATUS
|
||||
DPRTI EQU COMPRT+1 ;DATA PORT
|
||||
MSKI EQU 01H ;INPUT READY BIT
|
||||
;
|
||||
STATO EQU COMPRT ;OUTPUT STATUS
|
||||
DPRTO EQU COMPRT+1 ;DATA PORT
|
||||
MSKO EQU 80H ;OUTPUT READY BIT
|
||||
;
|
||||
; 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
|
||||
;
|
||||
; 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 0,0 ;J: DISK DEVICE
|
||||
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
|
||||
;
|
||||
DB 0 ;FMT MESSAGE BUFFER FOR LISTER
|
||||
DB 0 ;DID
|
||||
DB SLVID ;SID
|
||||
DB 5 ;FNC LIST OUT
|
||||
DB 0 ;SIZ
|
||||
DS 1 ;MESSAGE 0 LISTER NUMBER
|
||||
DS 128 ;MESSAGE 1 - 128 OUTPUT DATA
|
||||
;
|
||||
; INITIALIZE NETWROK
|
||||
;
|
||||
NTWKIN:
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
XRA A ;RETURN CODE 0 IS SUCCESS END
|
||||
RET
|
||||
;
|
||||
; OUTPUT STATUS OF NETWORK
|
||||
;
|
||||
NTWKST:
|
||||
LDA CNFTBL ;GET NETWORK STATUS
|
||||
MOV B,A
|
||||
ANI NOT (RCVERR+SNDERR)
|
||||
STA CNFTBL ;OFF ERROR BITS
|
||||
MOV A,B
|
||||
RET
|
||||
;
|
||||
; RETURN CONFIGRATION TABLE ADDRESS
|
||||
;
|
||||
CNTBAD:
|
||||
LXI H,CNFTBL
|
||||
RET
|
||||
;
|
||||
; SEND MESSAGE ON NETWORK
|
||||
; INPUT
|
||||
; BC:MESSAGE ADDRESS
|
||||
;
|
||||
SNDMSG:
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
SHLD MSGADR ;SAVE MESSAGE ADDRESS
|
||||
SNDMSR: ;RETRY LOOP
|
||||
MVI A,MAXRTY
|
||||
STA RTYCNT ;INITIALIE RETRY COUNT
|
||||
SEND:
|
||||
CALL NTRSET ;RESET BUFFER
|
||||
SENDS:
|
||||
LHLD MSGADR ;GET MESSAGE TOP
|
||||
MVI D,TMORTY ;TIME OUT RETRY COUNT
|
||||
SENDWT: ;ENQUIRE RESPONSE WAIT LOOP
|
||||
MVI C,ENQ
|
||||
CALL CHROUT ;SEND ENQUIRE TO MASTER
|
||||
CALL CHARIN ;WAIT RESPONSE
|
||||
JNC SENDGT ;GET RESPONSE
|
||||
DCR D ;TIME OVER
|
||||
JNZ SENDWT ;SEND ENQUIRE ONCE MORE
|
||||
JMP CHINTO ;TIME OVER FOR LINK
|
||||
;
|
||||
SENDGT: ;GET RESPONSE
|
||||
CPI ENQ ;CHECK SEND - SEND MODE
|
||||
JZ SNDRCV ;CRASH SEND SO TO PASS RECEIVE MODE
|
||||
CALL GETAK0 ;GET RESPONSE OF ENQ
|
||||
MVI C,SOH
|
||||
MVI E,5 ;HEADER LENGTH COUNT
|
||||
CALL MSGOUT ;SEND SOH,FMT,DID,SID,FNC,SIZ
|
||||
XRA A
|
||||
SUB D
|
||||
MOV C,A
|
||||
CALL NETOUT ;SEND HCS (HEADER CHECK SUM)
|
||||
CALL CHARIW ;GET RESPONSE
|
||||
JC GETATS ;TIME OVER
|
||||
CPI ACK
|
||||
JNZ $+9 ;NORMAL MODE
|
||||
CALL CHARIW ;MAYBE BUFFER LEFT ACK, SO IGNORE
|
||||
JC GETATS ;TIME OVER
|
||||
SUI ACKS
|
||||
JNZ GETATS ;MISS MATCH OF RESPONSE
|
||||
DCX H
|
||||
MOV E,M
|
||||
INX H
|
||||
INR E
|
||||
MVI C,STX
|
||||
CALL MSGOUT ;SEND STX,DB0,DB1,....
|
||||
MVI C,ETX
|
||||
CALL NETOUT ;SEND ETX
|
||||
XRA A
|
||||
SUB D
|
||||
MOV C,A
|
||||
CALL NETOUT ;SEND DATA CHECK SUM
|
||||
MVI C,EOT
|
||||
CALL CHROUT ;SEND END OF TRNASMISSION
|
||||
CALL GETAKS ;********NEED CALL ******* FOR ERROR RETRY
|
||||
RET
|
||||
;
|
||||
; PASS RECEIVE FOR SEND & SEND MODE
|
||||
;
|
||||
SNDRCV:
|
||||
CALL NTRSET ;CLEAR CURRENT BUFFER
|
||||
MVI D,TMORTY
|
||||
SNDRCW: ;WAIT FOR ANOTHER ENQ
|
||||
CALL CHARIN
|
||||
JNC SNDRCG ;GET DATA
|
||||
DCR D ;TIME OVER
|
||||
JNZ SNDRCW ;WAIT
|
||||
JMP SEND ;MAYBE MISS LINK, SO TO SEND
|
||||
;
|
||||
SNDRCG: ;GET DATA
|
||||
CPI ENQ
|
||||
JNZ SEND ;MAYBE MISS LINK
|
||||
LXI H,SNDRCV
|
||||
PUSH H ;SAVE RETRY LOOP
|
||||
CALL SNDACK ;SEND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
RC ;NO RESPONSE, SO RETRY
|
||||
CPI SOH
|
||||
RNZ
|
||||
LXI H,DHEADR ;DUMMY HEADER BUFFER
|
||||
MOV D,A
|
||||
MVI E,5
|
||||
CALL MSGIN ;GET HEADER
|
||||
CNC NETIN ;GET CHECK SUM
|
||||
RC ;TIME OUT RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW
|
||||
RC
|
||||
CPI STX ;CHECK START OF TEXT
|
||||
RNZ ;RETRY
|
||||
MOV D,A ;INITIALIZE CHECK SUM
|
||||
DCX H
|
||||
MOV E,M
|
||||
INR E
|
||||
INR E ;GET COUNT FOR READ
|
||||
SNDRCL: ;DATA PASS RECEIVE LOOP
|
||||
CALL NETIN ;GET ONE DATA
|
||||
RC ;TIME OUT RETRY
|
||||
DCR E
|
||||
JNZ SNDRCL ;TO NEXT DATA
|
||||
CPI ETX
|
||||
RNZ ;MISS MATCH OF END CODE
|
||||
CALL NETIN ;GET CHECK SUM
|
||||
RC
|
||||
CALL CHARIN
|
||||
RC
|
||||
CPI EOT ;END OF TRANSMISSION
|
||||
RNZ
|
||||
MOV A,D
|
||||
ORA A
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS
|
||||
POP H
|
||||
JMP SENDS
|
||||
;
|
||||
; GET ACKNOWLEDGE
|
||||
; OVERRIDING RETURN WHEN ERROR
|
||||
;
|
||||
GETAK0: ;CHECK ACKNOWLEDGE
|
||||
SUI ACK
|
||||
RZ
|
||||
SNDRTY:
|
||||
POP H ;DISCARD RETURN ADDRESS
|
||||
GETATS: ;TIME OVER RETRY
|
||||
LXI H,RTYCNT
|
||||
DCR M
|
||||
JNZ SEND ;SEND AGAIN
|
||||
CHINTO: ;CHARACTER IN TIME OUT
|
||||
MVI A,SNDERR
|
||||
CALL ERETRN
|
||||
JMP SNDMSR
|
||||
;
|
||||
GETAKS: ;GET SECOND ACKNOWLEDGE
|
||||
CALL CHARIW
|
||||
JC SNDRTY ;TIME OUT
|
||||
SUI ACKS
|
||||
RZ ;OK
|
||||
JMP SNDRTY ;RETRY
|
||||
;
|
||||
; RECEIVE MESSAGE FROM NETWORK
|
||||
; INPUT
|
||||
; BC:MESSAGE ADDRESS
|
||||
;
|
||||
RCVMSG:
|
||||
MOV H,B
|
||||
MOV L,C
|
||||
SHLD MSGADR ;SAVE MESSAGE ADDRESS
|
||||
RCVMSR:
|
||||
MVI A,MAXRTY
|
||||
STA RTYCNT ;INITIALIZE RETRY COUNT
|
||||
RECALL:
|
||||
CALL RECEIV
|
||||
LXI H,RTYCNT ;RETURN FROM RECEIV IS ERROR
|
||||
DCR M
|
||||
JNZ RECALL ;RETRY
|
||||
RCVTOT: ;TIME OUT
|
||||
MVI A,RCVERR
|
||||
CALL ERETRN
|
||||
JMP RCVMSR
|
||||
;
|
||||
; RECEIVE BODDY
|
||||
; RETURN OVERRIDING WHEN OK
|
||||
; SIMPLE RETURN IS ERROR
|
||||
;
|
||||
RECEIV:
|
||||
LHLD MSGADR ;GET MESSAGE ADDRESS
|
||||
MVI D,TMORTY
|
||||
CALL NTRSET ;RESET INPUT BUFFER
|
||||
RCVFST: ;RECEIVE FIRST CHARACTER LOOP
|
||||
CALL CHARIN
|
||||
JNC RCVGFS ;GET FIRST CHARACTER
|
||||
DCR D ;TIME OVER
|
||||
JNZ RCVFST ;RETRY
|
||||
POP H
|
||||
JMP RCVTOT ;SET TIME OVER ERROR FLAG & RETRY
|
||||
;
|
||||
RCVGFS: ;GET FIRST CHARACTER
|
||||
CPI ENQ
|
||||
JNZ RECEIV ;NOT ENQUIRE SO RETRY
|
||||
CALL SNDACK ;RESPONSE TO MASTER
|
||||
CALL CHARIW
|
||||
RC ;RETURN TO RECEIVE RETRY
|
||||
CPI SOH
|
||||
RNZ ;NOT START OF HEADER
|
||||
MOV D,A ;START OF HEADER
|
||||
MVI E,5 ;LENGTH OF HEADER
|
||||
CALL MSGIN ;GET HEADER BLOCK
|
||||
CNC NETIN ;GET HCS (HEADER CHECK SUM)
|
||||
RC ;TIME OVER RETRY
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
CALL SNDAKS ;SEND RESPONSE
|
||||
CALL CHARIW ;WAIT DATA TOP
|
||||
RC
|
||||
CPI STX
|
||||
RNZ ;NOT START OF TEXT
|
||||
MOV D,A ;START OF TEXT
|
||||
DCX H
|
||||
MOV E,M ;GET SIZE
|
||||
INX H
|
||||
INR E ;MAKE READ COUNT FOR DATA BLOCK
|
||||
CALL MSGIN ;RECEIVE DATA
|
||||
RC
|
||||
CALL CHARIN ;GET END CODE OF DATA BLOCK
|
||||
RC
|
||||
CPI ETX
|
||||
RNZ ;NOT END OF TEXT SO RETRY
|
||||
ADD D
|
||||
MOV D,A
|
||||
CALL NETIN ;GET HEADER CHECK SUM
|
||||
RC
|
||||
CALL CHARIN ;GET LAST CODE
|
||||
RC
|
||||
CPI EOT
|
||||
RNZ ;NOT END OF TRANSMIT SO ERROR
|
||||
MOV A,D
|
||||
ORA A
|
||||
JNZ SNDNAK ;CHECK SUM ERROR
|
||||
POP H ;OK ALL PACKETTE IS RECEIVED
|
||||
LHLD MSGADR
|
||||
INX H
|
||||
LDA CNFTBL+1 ;GET SLAVE ID
|
||||
SUB M ;CHECK SID
|
||||
JZ $+5
|
||||
MVI A,-1 ;SID ERROR
|
||||
PUSH PSW
|
||||
CALL SNDAKS ;SEND ACKNOWLEDGE
|
||||
POP PSW
|
||||
RET
|
||||
;
|
||||
; ROUTINES TO SEND RESPONSE CODES
|
||||
;
|
||||
SNDACK: ;SEND ACKNOWLEDGE
|
||||
MVI C,ACK
|
||||
JMP CHROUT
|
||||
;
|
||||
SNDAKS: ;SEND SECOND ACKNOWLEDGE
|
||||
MVI C,ACKS
|
||||
JMP CHROUT
|
||||
;
|
||||
SNDNAK: ;SEND NEGATIVE ACKNOWLEDGE
|
||||
MVI C,NAK
|
||||
JMP CHROUT
|
||||
;
|
||||
; ERROR RETURN
|
||||
; INPUT
|
||||
; A:ERROR BIT
|
||||
; OUTPUT
|
||||
; A:-1
|
||||
;
|
||||
ERETRN:
|
||||
LXI H,CNFTBL
|
||||
ORA M ;ON ERROR BIT
|
||||
MOV M,A
|
||||
CALL NTRSET ;RESET COMMUNICATION INTERFACE
|
||||
MVI A,-1 ;ERROR RETUNR CODE
|
||||
RET
|
||||
;
|
||||
; NETWORK ERROR RECOVER ROUTINE RESET COMMUNICATION INTERFACE
|
||||
;
|
||||
NTRSET:
|
||||
MVI A,080H
|
||||
OUT STATO ;RESET
|
||||
RET
|
||||
;
|
||||
; BOOTING UP ROUTINE
|
||||
;
|
||||
NTWKWB:
|
||||
JMP NTRSET ;RESET INTERFACE
|
||||
;
|
||||
; NETWORK OUTPUT DATA
|
||||
; INPUT
|
||||
; C:OUTPUT DATA
|
||||
; D:CHECK SUM
|
||||
;
|
||||
NETOUT:
|
||||
MOV A,D
|
||||
ADD C
|
||||
MOV D,A ;MAKE CHECK SUM
|
||||
CHROUT:
|
||||
IN STATO
|
||||
ANI MSKO ;GET OUTPUT READY MODE
|
||||
JNZ CHROUT ;NOT READY
|
||||
MOV A,C
|
||||
OUT DPRTO ;OUT DATA
|
||||
RET
|
||||
;
|
||||
; INPUT FROM NETWORK
|
||||
; OUTPUT
|
||||
; A:DATA
|
||||
; CF:ON TIME OVER OFF GET DATA
|
||||
;
|
||||
CHARIW: ;LONG WAIT
|
||||
MVI B,0
|
||||
JMP CHARIM
|
||||
;
|
||||
CHARIN:
|
||||
MVI B,10 ;10 MS = 192 CH / 192K BAUD
|
||||
CHARIM: ;WAIT LOOP
|
||||
MVI C,5AH ;1 MS WAIT VALUE
|
||||
CHARIL: ;1 MS WAIT LOOP
|
||||
IN STATI
|
||||
ANI MSKI
|
||||
JZ CHARIG ;READY
|
||||
DCR C
|
||||
JNZ CHARIL ;WAIT OF 1 MS
|
||||
DCR B
|
||||
JNZ CHARIM ;WAIT
|
||||
STC ;TIME OVER RETURN
|
||||
RET
|
||||
;
|
||||
CHARIG:
|
||||
IN DPRTI ;GET DATA
|
||||
RET
|
||||
;
|
||||
; MESSAGE INPUT
|
||||
; INPUT
|
||||
; HL:DESTINATION ADDRESS
|
||||
; E:INPUT COUNT
|
||||
;
|
||||
MSGIN:
|
||||
CALL NETIN
|
||||
RC ;TIME OUT
|
||||
MOV M,A ;GET DATA
|
||||
INX H
|
||||
DCR E
|
||||
JNZ MSGIN ;TO NEXT BYTE
|
||||
RET
|
||||
;
|
||||
; NETWORK INPUT
|
||||
; INPUT
|
||||
; D:CHECK SUM
|
||||
; OUTPUT
|
||||
; A:DATA
|
||||
;
|
||||
NETIN:
|
||||
CALL CHARIN ;RECEIVE BYTE IN BINARY MODE
|
||||
RC
|
||||
MOV B,A
|
||||
ADD D ;MAKE CHECK SUM
|
||||
MOV D,A
|
||||
ORA A ;OFF CARRY FLAG
|
||||
MOV A,B
|
||||
RET
|
||||
;
|
||||
; MESSAGE OUT
|
||||
; INPUT
|
||||
; HL:SOURCE ADDRESS
|
||||
; E:COUNT OF OUTPUT DATA
|
||||
; C:PREAMBLE CODE
|
||||
;
|
||||
MSGOUT:
|
||||
MVI D,0 ;CLEAR CHECK SUM
|
||||
CALL NETOUT ;OUT PREAMBLE CODE
|
||||
MSGOTL: ;OUT LOOP
|
||||
MOV C,M ;GET CODE
|
||||
INX H
|
||||
CALL NETOUT ;OUT DATA
|
||||
DCR E
|
||||
JNZ MSGOTL ;TO NEXT DATA
|
||||
RET
|
||||
;
|
||||
; DATA AREA
|
||||
;
|
||||
MSGADR: DS 2 ;MESSSAGE ADDRESS BUFFER
|
||||
DHEADR: DS 5 ;DUMMY HEADER BUFFER
|
||||
RTYCNT: DB 0 ;RETRY COUNT
|
||||
;
|
||||
;
|
||||
END
|
||||
|
||||
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
|
||||
|
||||
1
CP-NET/Readme.markdown
Normal file
1
CP-NET/Readme.markdown
Normal file
@@ -0,0 +1 @@
|
||||
# Networking software for CP/M and MP/M computers.
|
||||
Reference in New Issue
Block a user