-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsdloader.inc
More file actions
144 lines (117 loc) · 2.83 KB
/
sdloader.inc
File metadata and controls
144 lines (117 loc) · 2.83 KB
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
CLC_PORT = 0FFE5h
DATA_PORT = 0FFE6h
CTL_PORT = 0FFE7h
CLC_BIT = 80h;
SEND_MODE = 10010000b ; Íàñòðîéêà: 1 0 0 A ÑH 0 B CL 1=ââîä 0=âûâîä
RECV_MODE = 10011001b
ERR_START = 040h
ERR_WAIT = 041h
ERR_OK_DISK = 042h
ERR_OK = 043h
ERR_OK_READ = 044h
ERR_OK_RKS = 047h
;----------------------------------------------------------------------------
Entry:
; Ïåðâûì ýòàïîì ïðîèñõîäèò ñèíõðîíèçàöèÿ ñ êîíòðîëëåðîì
; Ïðèíèìàåòñÿ 256 ïîïûòîê. Äëÿ ýòîãî â ðåãèñòð C çàíîñèòñÿ 0
MVI C, 0
RetrySync:
; Ðåæèì ïåðåäà÷è
MVI A, SEND_MODE
STA CTL_PORT
; Ïåðåäàåì íà÷àëî êîìàíäû
MVI A, 013h
CALL Send
MVI A, 0B4h
CALL Send
MVI A, 057h
CALL Send
XRA A
CALL Send
; Ðåæèì ïðèåìà
MVI A, RECV_MODE
STA CTL_PORT
; Åñëè åñòü ñèíõðîíèçàöèÿ, òî êîíòðîëëåð îòâåòèò ERR_START
CALL Recv
CPI ERR_START
JZ Sync
; Ïàóçà / Ïðîïóñêàåì 256 áàéò, åñëè êîíòðîëëåð åùå ÷òî òî ïåðåäàåò.
; Â ñóììå áóäåò ïðîïóùåíî 64 Êá äàííûõ
MVI B, 0
RetrySync2:
CALL Recv
DCR B
JNZ RetrySync2
; Ïîïûòêè
DCR C
JZ MONITOR ; Îøèáêà ñèíõðîíèçàöèè
JMP RetrySync
;----------------------------------------------------------------------------
; ×òî áû ÌÊ îñâîáîäèë øèíó
Error:
CALL Recv
JMP MONITOR
;----------------------------------------------------------------------------
Sync:
; Æäåì ïîêà ÌÊ ïðî÷èòàåò ôàéë.
CALL WaitForReady
CPI ERR_OK_RKS
JNZ Error ; Îøèáêà ÷òåíèÿ ôàéëà
; Àäðåñ çàãðóçêè â BC
CALL Recv
MOV C, A
CALL Recv
MOV B, A
; Ñîõðàíÿåì â ñòåê àäðåñ çàïóñêà
PUSH B
RecvLoop:
; Ïîäîæäàòü
CALL WaitForReady
CPI ERR_OK_READ
JZ Recv ; Âñ¸ çàãðóæåíî, çàïóñê
ORA A ; Îøèáêà, ïåðåçàãðóçêà
JNZ Error ; Îøèáêà ÷òåíèÿ ôàéëà
; Äëèíà î÷åðåäíîãî áëîêà
CALL Recv
MOV E, A
CALL Recv
MOV D, A
; Èñïîëüçóåòñÿ íèæå
LXI H, CLC_PORT
; Ïðèíÿòü î÷åðåäíîé áëîê
INR D
XRA A
ORA E
JZ RecvBlock2
RecvBlock1:
MVI M, CLC_BIT ; 11
MVI M, 0 ; 11
LDA DATA_PORT ; 13
STAX B ; 7
INX B ; 5
DCR E ; 5
JNZ RecvBlock1 ; 10
RecvBlock2:
DCR D
JNZ RecvBlock1
JMP RecvLoop
;----------------------------------------------------------------------------
; Îòïðàâêà è ïðèåì áàéòà
Send:
STA DATA_PORT
Recv:
MVI A, CLC_BIT
STA CLC_PORT
XRA A
STA CLC_PORT
LDA DATA_PORT
RET
;----------------------------------------------------------------------------
; Îæèäàíèå ãîòîâíîñòè ÌÊ
WaitForReady:
CALL Recv
CPI ERR_WAIT
JZ WaitForReady
RET
;----------------------------------------------------------------------------
MONITOR: