Mercurial > repos > blastem
comparison fake_cpm.sz8 @ 820:cf6149b7c6e5
Implement a tiny bit of CPM BDOS and add a corresponding Z80 core driver so that simple CPM programs like ZEXDOC/ZEXALL can be run against my Z80 core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 29 Jul 2015 00:05:21 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
819:ab017fb09e77 | 820:cf6149b7c6e5 |
---|---|
1 CONSOLE_PORT equ 0 | |
2 STATUS_PORT equ 1 | |
3 EXIT_PORT equ 2 | |
4 org $E400 | |
5 jp handle_call | |
6 ld a, (should_exit) | |
7 dec a | |
8 jr z, do_exit | |
9 ld a, 1 | |
10 ld (should_exit), a | |
11 jp $100 | |
12 do_exit: | |
13 no_impl | |
14 out (EXIT_PORT), a | |
15 should_exit: | |
16 dc.b 0 | |
17 | |
18 console_in: | |
19 in a, (CONSOLE_PORT) | |
20 ld l, a | |
21 ret | |
22 console_out: | |
23 ld a, e | |
24 out (CONSOLE_PORT), a | |
25 ret | |
26 get_iobyte: | |
27 ld a, (3) | |
28 ld l, a | |
29 ret | |
30 set_iobyte: | |
31 ld a, e | |
32 ld (3), a | |
33 ret | |
34 write_string: | |
35 ld c, '$' | |
36 jp .start | |
37 .continue | |
38 out (CONSOLE_PORT), a | |
39 inc de | |
40 .start | |
41 ld a, (de) | |
42 cp c | |
43 jr nz, .continue | |
44 ;flush output | |
45 out (STATUS_PORT),a | |
46 ret | |
47 read_string: | |
48 ld a, (de) | |
49 ld c, a | |
50 ld b, $A ;newline | |
51 inc c | |
52 inc de | |
53 push de | |
54 inc de | |
55 jp .start | |
56 .continue | |
57 in a, (CONSOLE_PORT) | |
58 cp b | |
59 jr z, .end | |
60 ld (de), a | |
61 inc de | |
62 .start | |
63 dec c | |
64 jr nz, .continue | |
65 ;todo: consume excess characters | |
66 .end | |
67 pop hl | |
68 ex de, hl | |
69 sbc hl, de | |
70 ld a, l | |
71 ld (de), a | |
72 ret | |
73 | |
74 console_status: | |
75 in a, (STATUS_PORT) | |
76 ld l, a | |
77 ret | |
78 | |
79 handle_call: | |
80 ld a, c | |
81 or a | |
82 jr z, do_exit | |
83 dec a | |
84 jr z, console_in | |
85 dec a | |
86 jr z, console_out | |
87 dec a | |
88 jr z, no_impl ;aux reader input | |
89 dec a | |
90 jr z, no_impl ;aux punch output | |
91 dec a | |
92 jr z, no_impl ;printer output | |
93 dec a | |
94 jr z, no_impl ;direct console IO | |
95 dec a | |
96 jr z, get_iobyte | |
97 dec a | |
98 jr z, set_iobyte | |
99 dec a | |
100 jr z, write_string | |
101 dec a | |
102 jr z, read_string | |
103 dec a | |
104 jr z, console_status | |
105 jp no_impl |