os-z80/test_fs.z80
2023-11-05 10:34:11 -06:00

104 lines
1.4 KiB
Z80 Assembly

.global _start
_start:
call get_free_mailbox
ld (mailbox_num), hl
call get_free_frame ; Set up a frame for sending messages at 0x8000
ld a, c
ld (msg_phys_addr), a
ld (msg_phys_addr+1), hl
ld b, c
ld e, l
ld d, h
ld c, 8
call set_frame
setup_msg:
ld hl, (mailbox_num)
ld (0x8000), hl
ld a, 0x0 ; Register FS operation
ld (0x8002), a
ld a, 0x61 ; 'a'
ld (0x8003), a
ld a, 0x0 ; '\0'
ld (0x8004), a
ld (0x8011), hl
push de
push bc
ld de, 2 ; Get the mailbox number for the VFS
call proc_map_get
pmg_done:
pop bc
pop de
ld c, b ; Send the message
ld ix, 0x0000
call mb_send
loop:
call yield
loop_yield_done:
ld hl, (mailbox_num)
call mb_read ; Read a message
reg_fs_mb_read_done:
ld a, b ; Loop if there is no message
cp 0
jp nz, loop
ld hl, (mailbox_num)
ld de, 3
call proc_map_set
msg_loop:
call yield
yield_back:
ld hl, (mailbox_num)
call mb_read
mb_read_done:
ld a, b
cp 1
jp z, msg_loop
msg_read:
push bc
push de
push hl
ld b, c
ld c, 0xB
call set_frame
set_frame_done:
ld hl, (0xB000) ; Load destination mailbox into HL and save it on the stack
push hl
ld hl, 0xB002
; Handling code goes here
ld a, (hl)
inc hl
cp 0x0
jp z, open
cp 0x1
jp z, read
cp 0x2
jp z, mount
operation_done:
pop hl
pop ix
pop de
pop bc
call mb_send
jp msg_loop
open:
halt
ld a, 0xAA
ld (0xB000), a
ld a, 0x55
ld (0xB001), a
jp operation_done
read:
jp operation_done
mount:
jp operation_done
mailbox_num: .ds.b 2
msg_phys_addr: .ds.b 2