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