forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
4.3 KiB
174 lines
4.3 KiB
; cpmbdos.lib 1/19/2012 dwg - add READ$CON$BUF (10)
|
|
; cpmbdos.lib 1/15/2012 dwg - add more functions
|
|
|
|
;
|
|
; Copyright (C) 2011-2012 Douglas Goodall Licensed under GPL Ver 3.
|
|
;
|
|
; This file is part of NuBiosDWG and is free software: you can
|
|
; redistribute it and/or modify it under the terms of the GNU
|
|
; General Public License as published by the Free Software Foundation,
|
|
; either version 3 of the License, or (at your option) any later version.
|
|
; This file is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU General Public License for more details.
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with it. If not, see <http://www.gnu.org/licenses/>.
|
|
;
|
|
|
|
; BDOS function codes
|
|
|
|
TERMCPM equ 0 ; return to command line
|
|
CREAD equ 1 ; read a character
|
|
CWRITE equ 2 ; write a character
|
|
PRINTSTR equ 9 ; print string
|
|
READ$CON$BUF equ 10 ; read console buffer
|
|
RETVERNO equ 12 ; return version number
|
|
DSKRESET equ 13 ; disk reset
|
|
SELDSK equ 14 ; select disk
|
|
FOPEN equ 15 ; open file
|
|
FCLOSE equ 16 ; close file
|
|
FDELETE equ 19 ; delete file
|
|
READSEQ equ 20 ; read sequential
|
|
WRITESEQ equ 21 ; write sequential
|
|
FMAKE equ 22 ; make file
|
|
FRENAME equ 23 ; rename file
|
|
RETCURR equ 25 ; return current disk, 0=a
|
|
SETDMA equ 26 ; set dma address
|
|
WRITERAND equ 34 ; write random record
|
|
FCOMPSIZE equ 35 ; compute file size
|
|
SETRANDREC equ 36 ; set random record
|
|
RESETDRIVE equ 37 ; reset drive
|
|
WRITERANDZF equ 40 ; write random with zero fill
|
|
|
|
OEMID equ 0E5h
|
|
|
|
; File Control Block
|
|
DR$OFS equ 0
|
|
F1$OFS equ DR$OFS+BYTESIZE
|
|
F2$OFS equ F1$OFS+BYTESIZE
|
|
F3$OFS equ F2$OFS+BYTESIZE
|
|
F4$OFS equ F3$OFS+BYTESIZE
|
|
F5$OFS equ F4$OFS+BYTESIZE
|
|
F6$OFS equ F5$OFS+BYTESIZE
|
|
F7$OFS equ F6$OFS+BYTESIZE
|
|
F8$OFS equ F7$OFS+BYTESIZE
|
|
T1$OFS equ F8$OFS+BYTESIZE
|
|
T2$OFS equ T1$OFS+BYTESIZE
|
|
T3$OFS equ T2$OFS+BYTESIZE
|
|
EX$OFS equ T3$OFS+BYTESIZE
|
|
S1$OFS equ EX$OFS+BYTESIZE
|
|
S2$OFS equ S1$OFS+BYTESIZE
|
|
RC$OFS equ S2$OFS+BYTESIZE
|
|
D0$OFS equ RC$OFS+BYTESIZE
|
|
CR$OFS equ DR$OFS+32
|
|
R0$OFS equ CR$OFS+BYTESIZE
|
|
R1$OFS equ R0$OFS+BYTESIZE
|
|
R2$OFS equ R1$OFS+BYTESIZE
|
|
FCB$LEN equ R2$OFS+BYTESIZE
|
|
|
|
; Memory Locations
|
|
|
|
BDOS equ 5 ; entry point fo BDOS function calls
|
|
PRIFCB equ 5Ch ; primary file control block address
|
|
SECFCB equ 6Ch ; secondary file control block address
|
|
LENFCB equ 32 ; length of file control block
|
|
DEFBUF equ 80h ; address of default buffer
|
|
|
|
|
|
EXIT macro
|
|
mvi c,TERMCPM
|
|
call BDOS
|
|
endm
|
|
|
|
conin macro
|
|
push b ; save context B&C
|
|
push d ; save context D&E
|
|
push h ; save context H&L
|
|
mvi c,CREAD ; set up for console input BDOS call
|
|
call BDOS ; call BDOS function entry point
|
|
pop h ; restore context H&L
|
|
pop d ; restore context D&E
|
|
pop b ; restore context B&C
|
|
endm
|
|
|
|
conout macro char
|
|
enter ; save all context regs
|
|
mvi c,CWRITE ; set for console output BDOS call
|
|
mvi e,char ; place output character in E as required
|
|
call bdos ; call BDOS function entry point
|
|
leave ; restore all context regs
|
|
endm
|
|
|
|
conouta macro
|
|
enter
|
|
mvi c,CWRITE
|
|
mov e,a
|
|
call bdos
|
|
leave
|
|
endm
|
|
|
|
PRINT macro addr
|
|
enter
|
|
mvi c,PRINTSTR
|
|
lxi d,addr
|
|
call BDOS
|
|
leave
|
|
endm
|
|
|
|
PTRPRT macro addr
|
|
enter ; save all context registers
|
|
lxi h,addr ; load the address parameter into H&L
|
|
mov e,m ; pick up LO byte of new pointer
|
|
inx h ; bump index register
|
|
mov d,m ; pick up HO byte of new pointer
|
|
mvi c,PRINTSTR ; assembled pointer used for printstring call
|
|
call BDOS
|
|
leave ; restore all context registers
|
|
endm
|
|
|
|
|
|
movfcb macro destn,source
|
|
lxi d,destn
|
|
lxi h,source
|
|
lxi b,LENFCB
|
|
ldir
|
|
endm
|
|
|
|
copyfcb macro fcbname,source
|
|
local around
|
|
jmp around
|
|
fcbname ds 32
|
|
around:
|
|
endm
|
|
|
|
printf macro parmdata
|
|
local around
|
|
local string
|
|
print string
|
|
jmp around
|
|
string db parmdata
|
|
db '$'
|
|
around:
|
|
endm
|
|
|
|
printmsg macro parmdata
|
|
enter
|
|
local around
|
|
local string
|
|
print string
|
|
jmp around
|
|
string db parmdata
|
|
db '$'
|
|
around:
|
|
leave
|
|
endm
|
|
|
|
newfcb macro fcbname,drive,filename
|
|
fcbname db drive,filename
|
|
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
endm
|
|
|
|
|
|
; eof - cpmbdos.lib
|
|
|