bios8086: implement CHS disk i/o using int13h
This commit is contained in:
parent
a016fb0981
commit
ad8a347d7d
5
Makefile
5
Makefile
@ -1,4 +1,5 @@
|
|||||||
FLOPPY = 360
|
FLOPPY = 360
|
||||||
|
BIOS = 0xFA00
|
||||||
|
|
||||||
PROGRAMS = $(patsubst %.asm,%.com,$(wildcard com/*.asm))
|
PROGRAMS = $(patsubst %.asm,%.com,$(wildcard com/*.asm))
|
||||||
DISTFILES = rdos.bin $(PROGRAMS)
|
DISTFILES = rdos.bin $(PROGRAMS)
|
||||||
@ -10,6 +11,7 @@ QEMU_ARGS = $(addprefix --option-rom ,$(ROMS))
|
|||||||
|
|
||||||
NASM = nasm
|
NASM = nasm
|
||||||
NASM_ARGS = -s -Ilib -Plib/nasmcomp.asm -w-macro-params
|
NASM_ARGS = -s -Ilib -Plib/nasmcomp.asm -w-macro-params
|
||||||
|
NASM_ARGS += -DBIOS=$(BIOS)
|
||||||
|
|
||||||
EMUL = utils/emul
|
EMUL = utils/emul
|
||||||
|
|
||||||
@ -46,6 +48,9 @@ rom/%.rom: rom/%.asm
|
|||||||
com/%.com: com/%.asm
|
com/%.com: com/%.asm
|
||||||
$(NASM) $(NASM_ARGS) -o $@ $<
|
$(NASM) $(NASM_ARGS) -o $@ $<
|
||||||
|
|
||||||
|
bios%.bin: bios/%.asm
|
||||||
|
$(NASM) $(NASM_ARGS) -o $@ $<
|
||||||
|
|
||||||
fdimage.img: boot/fat.bs $(DISTFILES)
|
fdimage.img: boot/fat.bs $(DISTFILES)
|
||||||
mformat -C -i $@ -f $(FLOPPY) -B boot/fat.bs ::
|
mformat -C -i $@ -f $(FLOPPY) -B boot/fat.bs ::
|
||||||
mcopy -i $@ $(DISTFILES) ::
|
mcopy -i $@ $(DISTFILES) ::
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
ORG (RAM-0x600)
|
ORG BIOS
|
||||||
CPU 8086
|
CPU 8086
|
||||||
|
|
||||||
DISKCX: EQU 0x40
|
DISKCX: EQU 0x40
|
||||||
DISKDL: EQU 0x42
|
DISKDX: EQU 0x42
|
||||||
DISKDH: EQU 0x43
|
|
||||||
DISKBX: EQU 0x44
|
DISKBX: EQU 0x44
|
||||||
|
|
||||||
JMP NEAR BOOT
|
JMP NEAR BOOT
|
||||||
@ -22,10 +21,11 @@ JMP NEAR SETDMA
|
|||||||
JMP NEAR READ
|
JMP NEAR READ
|
||||||
JMP NEAR WRITE
|
JMP NEAR WRITE
|
||||||
JMP NEAR LISTST
|
JMP NEAR LISTST
|
||||||
JMP NEAR SECTRAN
|
|
||||||
|
|
||||||
BOOT:
|
BOOT:
|
||||||
STC
|
MOV AL, 0x19
|
||||||
|
CALL MSG
|
||||||
|
DB "BIOS 8086", 0
|
||||||
RET
|
RET
|
||||||
|
|
||||||
WBOOT:
|
WBOOT:
|
||||||
@ -50,6 +50,44 @@ CONIN:
|
|||||||
JZ CONIN
|
JZ CONIN
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
MSG:
|
||||||
|
POP SI
|
||||||
|
.LOOP:
|
||||||
|
MOV DL, BYTE [SI]
|
||||||
|
INC SI
|
||||||
|
TEST DL, DL
|
||||||
|
JZ .END
|
||||||
|
CALL CONOUT
|
||||||
|
JMP .LOOP
|
||||||
|
.END:
|
||||||
|
MOV DL, 0x20
|
||||||
|
CALL CONOUT
|
||||||
|
CALL PRINTAL
|
||||||
|
MOV DL, 0x0A
|
||||||
|
CALL CONOUT
|
||||||
|
MOV DL, 0x0D
|
||||||
|
CALL CONOUT
|
||||||
|
PUSH SI
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRINTAL:
|
||||||
|
PUSH AX
|
||||||
|
PUSH DX
|
||||||
|
AAM 16
|
||||||
|
MOV DL, AH
|
||||||
|
CALL PRINTNIB
|
||||||
|
MOV DL, AL
|
||||||
|
CALL PRINTNIB
|
||||||
|
POP DX
|
||||||
|
POP AX
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRINTNIB:
|
||||||
|
ADD DL, 0x30
|
||||||
|
CMP DL, 0x3a
|
||||||
|
JL CONOUT
|
||||||
|
ADD DL, 0x07
|
||||||
|
|
||||||
CONOUT:
|
CONOUT:
|
||||||
PUSH AX
|
PUSH AX
|
||||||
PUSH BX
|
PUSH BX
|
||||||
@ -86,7 +124,7 @@ HOME:
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
SELDSK:
|
SELDSK:
|
||||||
MOV BYTE [DISKDL], CL
|
MOV BYTE [DISKDX], CL
|
||||||
XOR BX, BX
|
XOR BX, BX
|
||||||
RET
|
RET
|
||||||
|
|
||||||
@ -102,7 +140,7 @@ SETTRK:
|
|||||||
XOR CH, CH
|
XOR CH, CH
|
||||||
RCR DX, 1
|
RCR DX, 1
|
||||||
RCL CH, 1
|
RCL CH, 1
|
||||||
MOV BYTE [DISKDH], CH
|
MOV BYTE [DISKDX+1], CH
|
||||||
|
|
||||||
; DX is sector number now
|
; DX is sector number now
|
||||||
; Shift into format for int13
|
; Shift into format for int13
|
||||||
@ -122,7 +160,8 @@ SETTRK:
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
SETSEC:
|
SETSEC:
|
||||||
STC
|
AND WORD [DISKCX], 0xFFA0
|
||||||
|
OR BYTE [DISKCX], CL
|
||||||
RET
|
RET
|
||||||
|
|
||||||
SETDMA:
|
SETDMA:
|
||||||
@ -130,13 +169,48 @@ SETDMA:
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
READ:
|
READ:
|
||||||
STC
|
PUSH CX
|
||||||
|
PUSH DX
|
||||||
|
PUSH BX
|
||||||
|
|
||||||
|
MOV AX, 0x0201
|
||||||
|
MOV CX, [DISKCX]
|
||||||
|
MOV DX, [DISKDX]
|
||||||
|
MOV BX, [DISKBX]
|
||||||
|
INT 0x13
|
||||||
|
XCHG AH, AL
|
||||||
|
|
||||||
|
POP BX
|
||||||
|
POP DX
|
||||||
|
POP CX
|
||||||
|
|
||||||
|
JC DISKERR
|
||||||
RET
|
RET
|
||||||
|
|
||||||
WRITE:
|
WRITE:
|
||||||
STC
|
PUSH CX
|
||||||
|
PUSH DX
|
||||||
|
PUSH BX
|
||||||
|
|
||||||
|
MOV AX, 0x0301
|
||||||
|
MOV CX, [DISKCX]
|
||||||
|
MOV DX, [DISKDX]
|
||||||
|
MOV BX, [DISKBX]
|
||||||
|
INT 0x13
|
||||||
|
XCHG AH, AL
|
||||||
|
|
||||||
|
POP BX
|
||||||
|
POP DX
|
||||||
|
POP CX
|
||||||
|
|
||||||
|
JC DISKERR
|
||||||
RET
|
RET
|
||||||
|
|
||||||
SECTRAN:
|
DISKERR:
|
||||||
STC
|
PUSHF
|
||||||
|
PUSH SI
|
||||||
|
CALL MSG
|
||||||
|
DB "DISKERR", 0
|
||||||
|
POP SI
|
||||||
|
POPF
|
||||||
RET
|
RET
|
||||||
|
Loading…
Reference in New Issue
Block a user