Skip to content

Commit 19a658a

Browse files
committed
A: to P: drives supported
1 parent 68182e8 commit 19a658a

File tree

5 files changed

+115
-46
lines changed

5 files changed

+115
-46
lines changed

bin/cpm.bin

1.66 KB
Binary file not shown.

bootstrap/cpm.asm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ _main:
2727
ld a, CPM_SEG
2828
ld mb, a
2929
stmix
30-
jp.sis $E1FD
30+
jp.sis $DCFD
3131

3232
_error:
3333
xor a
@@ -47,7 +47,7 @@ _error:
4747

4848
_cpm_restore:
4949
ld hl, _cpm_image
50-
ld de, $5E1FD
50+
ld de, $5dcfd
5151
ld bc, _cpm_end - _cpm_image
5252
ldir
5353
ret.lil

bootstrap/drive_emu.inc

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -74,64 +74,56 @@ _drive_write:
7474
ret.lil
7575
7676

77-
drive_a:
78-
db "cpma.dsk", 0
79-
drive_b:
80-
db "cpmb.dsk", 0
81-
drive_c:
82-
db "cpmc.dsk", 0
83-
drive_d:
84-
db "cpmd.dsk", 0
77+
drive:
78+
db "cpm"
79+
drive_letter:
80+
db "a.dsk", 0
8581

8682

8783
f_handle: db 0
8884

89-
f_a: db 0
90-
f_b: db 0
91-
f_c: db 0
92-
f_d: db 0
93-
9485
_drive_change:
95-
ld de, f_a
96-
or a
97-
sbc hl, hl
98-
ld l, a
99-
add hl, de
100-
ld a, (hl)
101-
ld (f_handle), a
102-
ret.lil
103-
86+
add a, 'a'
87+
ld (drive_letter), a
88+
xor a
89+
ld mb, a
10490

105-
fs_init:
106-
ld c, 0
91+
ld a, (f_handle)
10792
MOSCALL mos_fclose
10893

109-
ld hl, drive_a
94+
ld hl, drive
11095
ld c, fa_read+fa_write
11196
MOSCALL mos_fopen
112-
ld (f_a), a
97+
98+
ld (f_handle), a
11399
or a
114-
ret z
100+
jr z, _dr_change_err
115101

116-
ld hl, drive_b
117-
ld c, fa_read+fa_write
118-
MOSCALL mos_fopen
119-
ld (f_b), a
120-
121-
ld hl, drive_c
122-
ld c, fa_read+fa_write
123-
MOSCALL mos_fopen
124-
ld (f_c), a
125-
126-
ld hl, drive_d
102+
push af
103+
ld a, CPM_SEG
104+
ld mb, a
105+
pop af
106+
ret.lil
107+
108+
_dr_change_err:
109+
xor a
110+
call.lil _drive_change
111+
112+
ld a, CPM_SEG
113+
ld mb, a
114+
xor a
115+
ret.lil
116+
117+
fs_init:
118+
ld c, 0
119+
MOSCALL mos_fclose
120+
121+
ld hl, drive
127122
ld c, fa_read+fa_write
128123
MOSCALL mos_fopen
129-
ld (f_d), a
130-
131-
ld a, (f_a)
132124
ld (f_handle), a
133125
or a
134-
ret
126+
ret
135127

136128
fs_seek:
137129
add hl, hl ; *2

sources/bios/bios.asm

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,71 @@ dbp_size = $ - dbp
3939
dw dirbf, dpblk
4040
dw $0000, all03
4141

42+
dw $0000, $0000
43+
dw $0000, $0000
44+
dw dirbf, dpblk
45+
dw $0000, all04
46+
47+
dw $0000, $0000
48+
dw $0000, $0000
49+
dw dirbf, dpblk
50+
dw $0000, all05
51+
52+
dw $0000, $0000
53+
dw $0000, $0000
54+
dw dirbf, dpblk
55+
dw $0000, all06
56+
57+
dw $0000, $0000
58+
dw $0000, $0000
59+
dw dirbf, dpblk
60+
dw $0000, all07
61+
62+
dw $0000, $0000
63+
dw $0000, $0000
64+
dw dirbf, dpblk
65+
dw $0000, all08
66+
67+
dw $0000, $0000
68+
dw $0000, $0000
69+
dw dirbf, dpblk
70+
dw $0000, all09
71+
72+
dw $0000, $0000
73+
dw $0000, $0000
74+
dw dirbf, dpblk
75+
dw $0000, all10
76+
77+
dw $0000, $0000
78+
dw $0000, $0000
79+
dw dirbf, dpblk
80+
dw $0000, all10
81+
82+
dw $0000, $0000
83+
dw $0000, $0000
84+
dw dirbf, dpblk
85+
dw $0000, all11
86+
87+
dw $0000, $0000
88+
dw $0000, $0000
89+
dw dirbf, dpblk
90+
dw $0000, all12
91+
92+
dw $0000, $0000
93+
dw $0000, $0000
94+
dw dirbf, dpblk
95+
dw $0000, all13
96+
97+
dw $0000, $0000
98+
dw $0000, $0000
99+
dw dirbf, dpblk
100+
dw $0000, all14
101+
102+
dw $0000, $0000
103+
dw $0000, $0000
104+
dw dirbf, dpblk
105+
dw $0000, all15
106+
42107
dpblk: ;disk parameter block for all disks.
43108
dw 64 ;sectors per track
44109
db 6 ;block shift factor
@@ -64,7 +129,7 @@ nothing:
64129
ret
65130

66131
seldisk:
67-
cp 4
132+
cp 16
68133
jr nc, .ouch
69134

70135
ld (.drive_num), a ;; It's more safe than joungling with stack(ONLY HERE!)
@@ -119,6 +184,18 @@ all00: ds 128
119184
all01: ds 128
120185
all02: ds 128
121186
all03: ds 128
187+
all04: ds 128
188+
all05: ds 128
189+
all06: ds 128
190+
all07: ds 128
191+
all08: ds 128
192+
all09: ds 128
193+
all10: ds 128
194+
all11: ds 128
195+
all12: ds 128
196+
all13: ds 128
197+
all14: ds 128
198+
all15: ds 128
122199

123200
dirbf: ds 128
124201

sources/main.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
device zxspectrum48
22
3-
org $e200-3
3+
org $dd00-3
44
DISPLAY "ORG: ", $
55
cpm:
66
jp BOOT

0 commit comments

Comments
 (0)