]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blob - cbios/mm.180
8f63a2bf0d278137bd77af0f8a122e1e397f20c1
[z180-stamp-cpm3.git] / cbios / mm.180
1 page 255
2 .z80
3
4
5 global mmuinit
6 global bnk2log,bnk2phy,hwl2phy
7
8 include config.inc
9 include z180reg.inc
10
11
12 ;----------------------------------------------------------------------
13 ; Memory Map:
14 ;
15 ; Common CAStart ... 0FFFF
16 ; Bank 0 00000 ... CAStart-1
17 ; Bank 1 10000 ...
18 ; Bank 2
19 ;
20 ;----------------------------------------------------------------------
21
22 cseg
23
24 mmuinit:
25 ld a,USR$CBAR
26 out0 (cbar),a
27 ret
28
29 ;--------------------------------------------------------------------
30 ; Return the BBR value for the given bank number
31 ;
32 ; in a: Bank number
33 ; out a: bbr value
34
35 bnk2log:
36 or a ;
37 ret z ; Bank 0 is at physical address 0
38
39 dec a
40 push bc ;
41 ld b,a ;
42 ld c,CA ;
43 mlt bc ; bank size * bank number
44 ld a,c ;
45 add a,10h ; add bank0 + common
46 pop bc ;
47 ret ;
48
49 ;--------------------------------------------------------------
50
51 ;in hl: Log. Address
52 ; a: Bank number
53 ;
54 ;out ahl: Phys. (linear) Address
55
56
57 bnk2phy:
58 call bnk2log
59 ; fall thru
60
61 ;--------------------------------------------------------------
62 ;
63 ; hl: Log. Address
64 ; a: Bank base (bbr)
65 ;
66 ; 2 0 0
67 ; 0 6 8 0
68 ; hl hhhhhhhhllllllll
69 ; a + bbbbbbbb
70 ;
71 ; OP: ahl = (a<<12) + (h<<8) + l
72 ;
73 ;out ahl: Phys. (linear) Address
74
75 log2phy:
76 push bc ;
77 l2p_i:
78 ld c,a ;
79 ld b,16 ;
80 mlt bc ; bc = a<<4
81 ld a,c ;
82 add a,h ;
83 ld h,a ;
84 ld a,b ;
85 adc a,0 ;
86 pop bc ;
87 ret ;
88
89 ;--------------------------------------------------------------
90 ;
91 ; de: Log. Address
92 ;
93 ;
94 ; OP: ahl = (bankbase<<12) + (d<<8) + e
95 ;
96 ;out ahl: Phys. (linear) Address
97
98
99 hwl2phy:
100 push bc ;
101 in0 c,(cbar) ;
102 ld a,h ;
103 or 00fh ; log. addr in common1?
104 cp c
105 jr c,hlp_1
106
107 in0 a,(cbr) ; yes, cbr is address base
108 jr hl2p_x
109 hlp_1:
110 ld b,16 ; log. address in baked area?
111 mlt bc
112 ld a,h
113 cp c
114 jr c,hlp_2
115 in0 a,(bbr) ; yes, bbr is address base
116 jr hl2p_x
117 hlp_2:
118 xor a ; common1
119 hl2p_x:
120 jr nz,l2p_i
121
122 pop bc ; bank part is 0, no translation
123 ret ;
124
125
126 ;====================================================================
127
128 if 0
129
130 ;--------------------------------------------------------------------
131 ; Return the BBR value for the given bank number
132
133 bnk2bbr:
134 or a ; 4
135 ret z ; 5/10 | 11 14
136
137 push bc ;11 | 11
138 ld b,a ; 4
139 ld c,CA ; 6
140 mlt bc ;17 >45
141 ld a,c ; 4
142 add a,10h ; 6
143 pop bc ; 9 | 10
144 ret ; 9 | 10 76
145
146 push ix ;2 / 14 | 15
147 ld ix,bnktbl ;4 / 12 | 14
148 ld ($+3+2),a ;3 / 15 | 19
149 ld a,(ix+0) ;3 / 14 | 19
150 pop ix ;2 / 12 | 14
151 ret ;1 / 9 | 10 15 / 76|91
152
153 push hl ;1 / 11 | 11
154 ld hl,bnktbl ;3 / 9 | 10
155 add a,l ;1 / 4 | 4
156 ld l,a ;1 / 4 | 4
157 ld a,0 ;1 / 6 | 7
158 adc a,h ;1 / 4 | 4
159 ld h,a ;1 / 4 | 4
160 ld a,(hl) ;1 / 6 | 7
161 pop hl ;1 / 9 | 10
162 ret ;1 / 9 | 10 12 / 66|71
163
164 push hl ;1 / 11 | 11
165 add a,low bnktbl ;2 / 6 | 7
166 ld l,a ;1 / 4 | 4
167 ld a,0 ;1 / 6 | 7
168 adc a,high bnktbl ;2 / 6 | 7
169 ld h,a ;1 / 4 | 4
170 ld a,(hl) ;1 / 6 | 7
171 pop hl ;1 / 9 | 10
172 ret ;1 / 9 | 10 11 / 61|67
173
174 endif
175
176
177 end