5 changed files with 173 additions and 2 deletions
@ -0,0 +1,157 @@
|
||||
; SPDX-License-Identifier: MIT |
||||
; Copyright (c) 2021 Juhani 'nortti' Krekelä. |
||||
|
||||
iosegment equ 60h |
||||
dossegment equ iosegment + 1*1024/16 ; DOS starts 1KiB after IO system |
||||
|
||||
dos segment at dossegment |
||||
org 0 |
||||
dosinit proc far |
||||
dosinit endp |
||||
dos ends |
||||
|
||||
code segment |
||||
code ends |
||||
|
||||
constants segment |
||||
constants ends |
||||
|
||||
data segment |
||||
data ends |
||||
|
||||
iogroup group code, constants, data |
||||
|
||||
code segment |
||||
assume cs:iogroup, ds:iogroup, es:iogroup |
||||
org 0 |
||||
|
||||
; Jump table |
||||
jmp init |
||||
jmp status |
||||
jmp getch |
||||
jmp putch |
||||
jmp unimplemented ; Output to printer |
||||
jmp unimplemented ; Serial read |
||||
jmp unimplemented ; Serial write |
||||
jmp diskread |
||||
jmp diskwrite |
||||
jmp diskchange |
||||
jmp setdate |
||||
jmp settime |
||||
jmp gettime |
||||
jmp flush |
||||
jmp mapdev |
||||
|
||||
init: |
||||
cld |
||||
|
||||
cli |
||||
mov ax, cs |
||||
mov ds, ax |
||||
mov es, ax |
||||
; Put setup stack just below 32K |
||||
xor ax, ax |
||||
mov ss, ax |
||||
mov sp, 8000h |
||||
sti |
||||
|
||||
; Figure out memory size |
||||
int 12h |
||||
; AX = memory size in kilobytes |
||||
; We want it in paragraphs |
||||
; There are 64 paragraphs in a kilobyte |
||||
mov cx, 64 |
||||
shl al, cl |
||||
; Memory size is passed in dx |
||||
mov dx, ax |
||||
|
||||
; Disk table is passed in si |
||||
mov si, offset iogroup:disks_table |
||||
|
||||
call dosinit |
||||
|
||||
mov al, 'c' |
||||
jmp error |
||||
|
||||
; OUT: |
||||
; al = character if any |
||||
; zf = there were no characters |
||||
status proc far |
||||
; TODO: Implement |
||||
xor ax, ax |
||||
test ax, ax |
||||
ret |
||||
status endp |
||||
|
||||
getch: |
||||
mov al, 'g' |
||||
jmp error |
||||
|
||||
; IN: |
||||
; ax = character |
||||
putch proc far |
||||
push ax |
||||
mov ah, 0eh |
||||
int 10h |
||||
pop ax |
||||
ret |
||||
putch endp |
||||
|
||||
diskread: |
||||
mov al, 'r' |
||||
jmp error |
||||
diskwrite: |
||||
mov al, 'w' |
||||
jmp error |
||||
diskchange: |
||||
mov al, 'c' |
||||
jmp error |
||||
setdate: |
||||
mov al, 'd' |
||||
jmp error |
||||
settime: |
||||
mov al, 't' |
||||
jmp error |
||||
gettime: |
||||
mov al, 'T' |
||||
jmp error |
||||
flush: |
||||
mov al, 'f' |
||||
jmp error |
||||
|
||||
mapdev: |
||||
mov al, 'm' |
||||
jmp error |
||||
|
||||
unimplemented: |
||||
mov al, '@' |
||||
|
||||
error: |
||||
mov ah, 0eh |
||||
int 10h |
||||
|
||||
hang: |
||||
hlt |
||||
jmp hang |
||||
|
||||
code ends |
||||
|
||||
constants segment |
||||
|
||||
disks_table: |
||||
db 1 ; 1 drive |
||||
|
||||
db 0 ; Physical drive 0 |
||||
dw offset iogroup:parameters_320k |
||||
|
||||
parameters_320k: |
||||
dw 512 ; Sector size in bytes |
||||
db 2 ; Sectors per cluster |
||||
dw 1 ; Number of reserved sectors |
||||
dw 2 ; Number of FATs |
||||
dw 112 ; Number of directory entries |
||||
dw 320*2 ; Number of sectors |
||||
|
||||
constants ends |
||||
|
||||
end |
Loading…
Reference in new issue