Separate out headers for structures

This commit is contained in:
Nero 2019-10-30 13:10:23 +00:00
parent a49e3b2610
commit b164c79f42
5 changed files with 87 additions and 24 deletions

View file

@ -1,18 +1,15 @@
ORG BDOS
%include "bios/header.asm"
%include "hdr/bios.asm"
%include "hdr/fcb.asm"
%include "hdr/bpb.asm"
DISKBUF: EQU (BDOS-0x200) ; deblocking
STACK: EQU (DISKBUF) ; grows down
DEFDRV: EQU 4
DISKBPB: EQU (DISKBUF-21) ; BPB of the current driv
DISKDRV: EQU (DISKBPB-1) ; BYTE denoting drive of current fcb
STACK: EQU (DISKDRV & 0xFFFE) ; even address, grows down
FCB_DRV: EQU 0 ; BYTE 0=A: 1=B: 2=C: ...
FCB_NAM: EQU 1 ; 8 BYTES, space padded
FCB_EXT: EQU 9 ; 3 BYTES, space padded
FCB_TYP: EQU 12 ; 1 for regular file
FCB_BLK: EQU 13 ; current 128b block in sector
FCB_CLU: EQU 14 ; current sector
FCB_LFT: EQU 16 ; bytes left to read in current file
DEFDRV: EQU 4 ; default drive when opening a FCB
SYSCALL:
TEST CL, CL
@ -25,8 +22,9 @@ SYSCALL:
JE PUTS
CMP CL, 10
JE GETS
STC
RET
CMP CL, 11
JE STATUS
JMP SYSCALL2
SETUP:
MOV SP, STACK
@ -34,16 +32,10 @@ SETUP:
MOV CX, DISKBUF
CALL SETDMA
MOV DL, BYTE [DEFDRV]
ADD DL, '@'
CALL PUTC
MOV DL, '>'
CALL PUTC
MOV CL, 0x00
CALL LOADBPB
MOV DX, 0x7F
MOV BYTE [0x7F], 0x2F
MOV BYTE [0x80], 2
CALL GETS
MOV AX, [DISKBPB]
INT3
@ -63,8 +55,7 @@ GETC:
ret
PUTC:
CALL CONOUT
RET
JMP CONOUT
PUTS:
PUSH SI
@ -134,3 +125,53 @@ GETS_BS:
CALL PUTC
DEC CL
JMP GETS_L
STATUS:
JMP CONST
SYSCALL2:
CMP CL, 13
JE DISKRST
CMP CL, 14
JE SETDEFDSK
CMP CL, 15
RET
DISKRST:
MOV BYTE [DISKDRV], 0xFF
RET
SETDEFDSK:
MOV BYTE [DEFDRV], DL
RET
; IN CL drive num
LOADBPB:
PUSH CX
CALL SELDSK
; first track
MOV CX, 0
CALL SETTRK
; first sector
MOV CX, 1
CALL SETSEC
; into default diskbuf
MOV CX, DISKBUF
CALL SETDMA
CALL READ
; copy BPB
PUSH SI
PUSH DI
MOV CX, 21
MOV SI, DISKBUF+0x0B
MOV DI, DISKBPB
REP MOVSB
POP DI
POP SI
; store drive number
POP CX
MOV BYTE [DISKDRV], CL
RET
FCBOPEN:
RET