-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathTODO.txt
236 lines (195 loc) · 10.3 KB
/
TODO.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
TODO
+++ sys_readwrite - ÍÅ ÎÁÐÀÁÎÒÀÍÀ - ïåðåñûëêà áóôåðîâ. Åñëè àäðåñ áóôåðà áîëüøå F000h (CPMemu conout/conin), òî ïåðåñûëêó íå äåëàòü
- çàìåíèòü C-øíûå âûçîâû bdos(), bdoshl(), bios() íà ñâîè àññåìáëåðíûå - ÷òîáû ÿäðî íå ïðåðûâàëîñü ïî ^C
- âûñòàâèòü òèï ïåðåìåííûõ register â ïðîöåäóðàõ
+++ pr2.c: calltrap - âûçîâû èç ÿäðà â ñòðàíèöó ïðîöåññà + îáðàáàòûâàòü ñòåê
- OPTIM: çàìåíèòü __ei() íà #asm ei #endasm , _di() íà #asm di #endasm
- OPTIM: ìîæåò áûòü èñïîëüçîâàòü call MEI ; call MDI ???
- OPTIM: âûçîâ-âíóòðè-âûçîâà ( int func() { return finc2(); } ) ìîæíî çàìåíèòü íà #define func func2
+++ âûçîâ GBL long unix() íàäî ñäåëàòü ñîâìåñòèìî ñ íàòèâíûì UZIX
+++ Ïàðàìåòðû â ñòðàíèöå ïðîöåññà ïåðåäàþòñÿ íà ñòåêå: callno, arg1, arg2, arg3, arg4
+++ â unix() â ñòðàíèöó ÿäðà ïàðàìåòðû ïåðåäàåì óæå â UDATA, ðåçóëüòàò âîçâðàùàåòñÿ â DEHL (long)
 ôèíàëüíîé ÷èñòêå óáðàòü âñå ëèøíèå printf, panic è global: nop, ïðî÷åñàòü íà ïðåäìåò ïîìå÷åííîãî êîììåíòàðèåì TODO
+++ Íå çàáûòü ïåðåñîáðàòü ps, renice, top ! (èçìåíèë ptab_t â unix.h)
??? AltairDOS v3.5r: ÷òî òàì ñ ïðîöåäóðàìè îáðàáîòêè TTY ïî ïðåðûâàíèþ (mtty â 0f1xxh èëè ãäå? ïî÷åìó íå êîïèðóåòñÿ ïðè coldstart?)
??? AltairDOS v3.5r: ïåðåðàñïðåäåëèòü áóôåðà â îáëàñòè F120..F1FF - ïåðåíåñòè äèñêîâûé áóôåð â íà÷àëî, çàòåì áóôåð TTY, çàòåì âñå ïðîöåäóðû
+++ IDEBDOS: áóôåð ïðîöåäóð ïåðåíåñòè ñ F100 íà YLSTOUT (F3xx)
+++ IDEBDOS: äîáàâèòü óñòàíîâêó âðåìåíè
??? IDEBDOS: äîáàâèòü çàïèñü/÷òåíèå N áëîêîâ (ïàðàìåòð) â óêàçàííóþ ðåãèñòðîì-ïàðàìåòðîì ñòàíèöó ïàìÿòè (ïàðàìåòð)
??? IDEBDOS: SD - åäèíñòâåííûé ïðèâîä, SD=0 èëè SD=1 - âûáîð ïðèâîäà äëÿ SD, à îñòàëüíîé - äëÿ IDE.
#ifdef ORI_UZIX
UDATA(u_argn1)=B_LDIRTO2(BUFSIZE/2, oldname, (void*)TEMPDBUF);
UDATA(u_argn2)=B_LDIRTO2(BUFSIZE/2, newname, (void*)TEMPDBUFX);
#endif
ld de,PSWAP_OFFSET
add hl,de ; /* 20150116 */
/*
== ORION AltairDos page 0 memory map
0000 ---------------------
| Screen0 - graphic
4000 ---------------------
| Screen1 - graphic
8000 ---------------------
| AltairDos ExtendedRAM: 4k segments 08,09,0a,0b - planned for shared libc in future
C000 ---------------------
| CP/M crt driver
| + base fonts (KOI8-R) LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| SEE BELOW COMMON MEMORY (accesed from any page)
== ORION AltairDos page 1 memory map
0000 ---------------------
| Screen0 - color attributes (16 color)
4000 ---------------------
| Screen1 - color attributes (16 color)
8000 ---------------------
| AltairDos ExtendedRAM: 4k segment 18 - planned for IDEBDOS driver
9000 ---------------------
| CP/M (AltairDOS) kernel LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| SEE BELOW COMMON MEMORY (accesed from any page)
== ORION UZIX kernel space map (page 2, e.i. CP/M TPA):
0000 ---------------------
| system vectors
0010 ---------------------
| reserved for CP/M
0100 ---------------------
| kernel code
E000 ---------------------
| kernel heap
Eõxx ---------------------
| kernel stack
EDxx ---------------------
| kernel subroutines for ssiz/scop (argv/env services)
E860 ---------------------
| CP/M (AltairDOS) BDOS (actually wrapper calling to page1 code)
E8D0 ---------------------
| CP/M (AltairDOS) BIOS (actually wrapper calling to page1 code)
ED80 ---------------------
| UZIX SRV_STACK (for ISR routine)
EDF9 ---------------------
| UZIX TEMPDBUF (for unplanned disk IO)
EFF8 ---------------------
| _OLDYINTVEC byte:word (3b) ^ ^ ^
| _PRCIMSTACK word | | |
| _BNKMARKER byte LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| SEE BELOW COMMON MEMORY (accesed from any page)
== ORION UZIX process space map (pages 3..15):
0000 ---------------------
| system vectors
0010 ---------------------
| reserved for CP/M emu
0100 ---------------------
| user process (TPA)
EBC0 ---------------------
| CP/M BDOS/BIOS console functions emulator (BDOS 1..12, BIOS 1..4 functions)
ECxx ---------------------
| kernel subroutines for getc/putc
EDxx ---------------------
| kernel subroutines for ssiz/scop (argv/env services)
EDxx ---------------------
| kernel subroutines for GoUnix/GoExit
EExx ---------------------
| kernel subroutines for swapin/swapout
EE80 ---------------------
| FSTACK_BCKP
EF80 ---------------------
| UDATA_STASH
EFF8 ---------------------
| _RETPAGE byte
| _GOSWAPSTACK word
| _GOUNIXSTACK word ^ ^ ^
| _PRCIMSTACK word | | |
| _BNKMARKER byte LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| FAREA_STACK COMMON MEMORY (accesed from any page)
F100 --------------------- | | |
| IDEBDOS routines \/ \/ \/
F120 ---------------------
| CP/M tty routines
F14x ---------------------
| CP/M tty buffer
F162 ---------------------
| dtsize byte
| _ret_page byte
| _ret_addr word
| _ret_sp word
| _switch_page byte
| U_DATA 120 bytes
F1E2 ---------------------
| CP/M crt routines
F201 ---------------------
| CP/M interbank routines: BLDIR, BJMP, BCALL, BRET, BLDB, BSTB
F2xx ---------------------
| CP/M int 50Hz ISRs: MINT, MDI, MEI; ISR_RET=0f2e3h, F3STACK=0F2B5h
F2FB ---------------------
| reserved int vector word
| TTY IM2 int vector word
| 50Hz IM2 int vector word
F301 ---------------------
| CP/M interbank vectors (page:addr, 3 bytes):
| YBDOS bank:addr=byte:word
| YBIOSWARM bank:addr=byte:word
| YBIOSCONST bank:addr=byte:word
| YBIOSCONIN bank:addr=byte:word
| YBIOSCONOUT bank:addr=byte:word
| YBIOSLSTOUT bank:addr=byte:word
| YBIOSAUXOUT bank:addr=byte:word
| YBIOSAUXIN bank:addr=byte:word
| YBIOSHOME bank:addr=byte:word
| YBIOSSELDISK bank:addr=byte:word
| YBIOSSELTRK bank:addr=byte:word
| YBIOSSELSEC bank:addr=byte:word
| YBIOSSETDMA bank:addr=byte:word
| YBIOSREAD bank:addr=byte:word
| YBIOSWRITE bank:addr=byte:word
| YBIOSLSTST bank:addr=byte:word
| intvec (INT 50Hz) byte:word
| intkey (ctrl+shft+key) byte:word
F334 ---------------------
| F3-stack (for interbank routines)
F3C0 ---------------------
| ROM-BIOS Monitor vectors, variables and constants
F400 ---------------------
F500 keyboard PPA 8255
F600 romdisk PPA 8255
| printer PPA 8255
F700 ---------------------
| user devices ports
F800 ---------------------
| ROM-BIOS Monitor code (ROM)
FFFF ---------------------
*/
SWAPPING (actually RAM pages switching and areas F000..F1FF, F162..F1DF backup):
SWAPOUT âîçìîæåí â äâóõ ñëó÷àÿõ:
1. Èç ñèñòåìíûõ ïðîöåäóð ÿäðà (èç unix() - ñòåê óñòàíîâëåí â F000-îáëàñòè)
Ñîîòâåòñòâåííî, äëÿ âûêëþ÷àåìîãî ïðîöåññà íóæíî:
à. Ñîõðàíèòü SP â ïåðåìåííóþ (FSTACK_BCKP-2) â ñòðàíèöó ïðîöåññà
á. Ñêîïèðîâàòü (B_COPY) ñîáñòâåííî îáëàñòü ñòåêà â ìàññèâ FSTACK_BCKP â ñòðàíèöó ïðîöåññà
â. ñêîïèðîâàòü (B_COPY) U_DATA â UDATA_STASH â ñòðàíèöó ïðîöåññà
ã. ñêîïèðîâàòü ðåãèñòðû, õîòÿ äëÿ ÿäðà ýòî è íå êðèòè÷íî
Âñå - ìîæíî ïåðåêëþ÷àòü íà ñëåäóþùèé ïðîöåññ (âûïîëíèòü swapin() - îí ïðîâàëèòñÿ â èñêîìûé ïðîöåññ),
çíà÷åíèå ðåãèñòðîâ âûçûâàâøåãî unix() ïðîöåññà áåçðàçëè÷íî
2. Èç îáðàáîò÷èêà ïðåðûâàíèé â ÿäðå (SP âíóòðè îáðàáîò÷èêà ñòàâèòñÿ íà _SRV_STACK 0edf6h, â ñòðàíèöå ÿäðà) -
êîãäà íóæíî ñîõðàíèòü êîíòåêñò è ïåðåêëþ÷èòüñÿ íà ñëåäóþùèé. Ñîîòâåòñòâåííî, äëÿ âûêëþ÷àåìîãî ïðîöåññà íóæíî:
à. Âçÿòü èç ñòåêà "áàíê:àäðåñ" ïðåðâàííîãî ïðîöåññà (ìîæåò áûòü êàê â ïðîñòðàíñòâå ïðîöåññà, òàê è â ÿäðå),
èç ïåðåìåííîé PRC_IMSTACK çíà÷åíèå SP, ñîõðàíèòü åãî â ñòðàíèöó ïðîöåññà è
åñëè îíî áîëåå F000, òî âûïîëíèòü 1.á ( B_COPY() )
á. ñêîïèðîâàòü (B_COPY) U_DATA â UDATA_STASH, FAREASTACK â FSTACK_BCKP â ñòðàíèöó ïðîöåññà
â. Ìîäèôèöèðóåì àäðåñà âîçâðàòà íà ñòåêå:
çíà÷åíèå ïåðåìåííîé retstack (êóäà âîçâðàùàòüñÿ â ïðîöåññ) çàïîìèíàåì â static _old_retstack,
_ret_to=*(retstack+4 /*push af, push hl in proc page*/); *(retstack+4)=before_swapin;
_ret_to ðàñïîëàãàåì â F-îáëàñòè ïîñëå dtsize - ðÿäîì ñ u_data
*(retstack+4) è ïðîöåäóðà before_swapin - â ñòðàíèöå ïðîöåññà! Ò.ê. ïðè INT50 push af, push hl äåëàëîñü òàì!
ã. Ïðîñòî âîçâðàùàåìñÿ èç ïðåðûâàíèÿ (äëÿ áàëàíñà F300-ñòåêà) è ïîïàäàåì â save_context() â ñòðàíèöå ïðîöåññà ñ òåì
çíà÷åíèåì ñòåêà è ðåãèñòðîâ ÖÏÓ, êîòîðîå áûëî â ìîìåíò ïðåðûâàíèÿ â ñòðàíèöå ïðîöåññà, ãîòîâèì êîíòåêñò ê âûêëþ÷åíèþ -
ñîõðàíÿåì âñå ÷òî ïîòîì ïîòðåáóåòñÿ äëÿ âêëþ÷åíèÿ êîíòåêñòà: ñòðàíèöó âîçâðàòà, ñòåê è ðåãèñòðû íèæå FSTACK_BCKP:
SWAPIN - âêëþ÷åíèå êîíòåêñòà â ðàáîòó. Âûçûâàåòñÿ èçâíå äëÿ âûêëþ÷åííîãî êîíòåêñòà ñ íîðìàëèçîâàííûìè ñòåêàìè.
Äîëæåí óìåòü âîçâðàùàòüñÿ â óêàçàííóþ â _RETPAGE ñòðàíèöó ïàìÿòè (ïðîöåññà èëè ÿäðà), ò.ê. swapout âûçûâàåòñÿ íå òîëüêî ïî ïðåðûâàíèþ,
íî è â ÿäðå - â unix(). Âîçâðàùàòüñÿ íóæíî â òî÷êó ISR_RET ñ âûñòàâëåííûì ñòåêîì ïðîöåññà: â ISR_RET âîññòàíîâÿòñÿ AF è äàëåå âîçâðàò
ïî ñòåêó. Çàâåðøåíèå swapin - ðåàëüíîå ïåðåêëþ÷åíèå â ñëåäóþùèé ïðîöåññ, âûïîëíÿåòñÿ ñëóæåáíîé ïðîöåäóðîé â ñòðàíèöå öåëåâîãî ïðîöåññà.
à. di
á. Ñêîïèðîâàòü 256 áàéò èç (FSTACK_BCKP) â (FAREA_STACK) â ñòðàíèöå ïðîöåññà íà êîòîðûé ïåðåêëþ÷àåìñÿ (B_COPY)
â. ñêîïèðîâàòü 120 áàéò èç (UDATA_STASH) â (U_DATA) â ñòðàíèöå ïðîöåññà
ã. ñôîðìèðîâàòü íà ñòåêå áàíê è àäðåñà âîçâðàòà ÷òîáû ñíà÷àëî ïîïàäàòü â ISR_RET, à òàì óæå â òðåáóåìóþ òî÷êó ïàìÿòè ïî ret
ä. âåðíóòüñÿ ïî JP BRET.