mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 08:54:17 +00:00
653 lines
11 KiB
Plaintext
653 lines
11 KiB
Plaintext
; 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
|
||
|