mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-27 10:24:19 +00:00
Upload
Digital Research
This commit is contained in:
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
|
||||
|
||||
Reference in New Issue
Block a user