This repository has been archived by the owner on Dec 24, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 91
/
Copy pathVT100.map
241 lines (241 loc) · 8.29 KB
/
VT100.map
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
237
238
239
240
241
0040 . ; 0x0f to NVR latch
0042 . ; invert A (0xf0)
0043 . ; 0xf0 to brightness
0045 . ; zero A
0046 . ; zero D, L, H
0049 . ; next 2K ROM
004A . ; store the current ROM # in B
004B . ; show current ROM on LEDs
004D . ; Checksum over 8 256B blocks
004F . ; Rotate A left
0050 . ; A <- A ^ memory
0051 . ; next memory address
0052 . ; ... repeat until end of block
0055 . ; next block
0056 . ; decrement block count
0057 . ; ... repeat until end of chip
005A . ; Check the value of the accumulator
005B . ; If it's not zero, hang forever
005E . ; Put the ROM # back in the accumulator
005F . ; If it's not 4...
0061 . ; repeat for the next ROM
0065 . ; write 5 to LEDs (turns on L2 and L4)
0067 . ; Test pattern: 0xaa
0069 . ; 0x2c is the top of RAM on the basic board
006B . ;
006D . ; flags buffer &= 0x02 : is AVO installed?
006F . ; if bit 2 is not set, AVO is installed
0072 . ; 0x40 is the top of RAM on the AVO
0074 . ; load HL with top of RAM
0075 . ; dec HL
0076 . ; M <- 0
0078 . ; dec HL
0079 . ; a <- h
007A . ; compare to 1f (top of ROM)
007C . ; continue to zero if not at ROM
0080 . ; read a byte of memory
0082 . ; if it's zero, skip ahead
0088 . ; err
008D . ; err
0090 . ; run test pattern through ram
0093 . ; jump to 00a8 if ok
0099 . ; err
009E . ; ok
00A5 . ; Hang if non-AVO memory
00B3 . ; Repeat mem test with pattern 0x55
00BA . ; zero scratch and screen mem
00BD . ; Set a number of scratch values to fixed values
00C0 . ; .... more memory initialization
00FE . ; Read from keyboard port
0102 . ; copy b <- a
0103 . ; subtract 0x7c from a
0105 . ; jump to 011a if a is a normal key
0108 . ; otherwise h <- a
0109 . ; h++
010A . ; a <- 0x10
0112 . ; load keys flag addresss
0115 . ; or in control bit
0116 . ; store again
0117 . ; jump to end to interrupt
011A . ; load keys flag address
011F . ; load key counter
0120 . ; if overflow.. (>3 keys)
0122 . ; discard keypress and end interrupt
0125 . ; otherwise increment key counter
0126 . ; load key address buffer?
0129 . ; add key counter to address buffer
012C . ; save key to address buffer
02A4 . ; HL <- 0x204e (top of stack)
02A7 . ; DE <- 0x0fb2
02AA . ; B <- 0
02AC . ; memset(0x204e,0,0xfb2)
02AF . ; invert A
02B0 . ; store A in 0x2104
02B3 . ; HL <- 0x2004
02B6 . ; *(0x2052) = 0x2004
02B9 . ; HL <- 0x22d0
02BC . ; *(20f6) = 0x22d0
02C0 . ; 0x2140 = 0xe605
02C3 . ; HL = 0x2000
02C6 . ; DE = 0x02d9
02C9 . ; B = 18
02CB . ; copy 18 bytes from 0x02d9 to 0x2000
02CE . ; HL = 0x3000
02D1 . ; DE = 0x1000
02D4 . ; B = 0xFF
02D6 . ; Set all of attribute RAM to 0xFF and return
02EB . ; HL = 0x0212
02EE . ; Store 0x1202 at 0x212d
02F1 . ; A = 0x35
02F3 . ; 0x212c = 0x35
02F6 . ; A = 1
02F8 . ; 0x205b = 1
02FB . ; 0x2176 = 1
02FE . ; HL = 0x07ff
0301 . ; store 0xff07 at 0x2149
0304 . ; A = 2
0306 . ; 0x2073 = 2
0309 . ; A = 0xf7
030B . ; 0x20fa = 0xf7
030E . ; read flags buffer
0310 . ; And it with 0x04 (check graphics flag)
0312 . ; A=1
0314 . ; if no graphics skip
0317 . ; else store 1 in 0x2079
031A . ; A = 0xff
031C . ; 0x210e = 0xff
031F . ; 0x21ba = 0xff
0322 . ; H = 0x80
0324 . ; L = 0x80
0325 . ; Store 0x8080 at 0x20c0
038B . ; Load memory at DE into accumulator
038C . ; Store it at HL
038D . ; HL++
038E . ; DE++
038F . ; B--
0390 . ; until B is zero
03CF . ; Read from PUSART data
03DE . ; Read from PUSART ctrl
08D4 . ; subtract 5 from A and return if negative
08D7 . ; load jump table at 8e5
08DA . ; double a
08DE . ; hl = X08e5 + 2A
08DF . ; load DE from (HL) little-endian
08E3 . ; zero A
08E4 . ; jump to address
08E7 . ; immediate return
08ED . ; MYSTERY ADDRESS: this isn't even in AVO!!!
0A15 . ; HL = 0x05e6
0A18 . ; 0x2140 = 0xe605
1083 . ; M <- B
1084 . ; HL++
1085 . ; DE--
1086 . ;
1087 . ; A = D | E
1088 . ; repeat if A != 0
1493 . ; Read flags buffer
1495 . ; check if transmit buffer is empty
1497 . ; if zero, return
1498 . ; HL = 0x2144
149B . ; Load from 2144
149C . ; Check if zero
149D . ;
14A0 . ; If not, A = 10 (else A is zero)
14A2 . ;
14A5 . ; or bits from 0x21a5
14A6 . ;
14A9 . ; or bits from 0x2145
14AA . ;
14AB . ; ... and 0x2146
14AC . ;
14AD . ; ... and 0x2147
14AE . ; zero 0x2147
14B0 . ;
14B1 . ; ... and 0x2148
14B2 . ; zero 0x2148
14B4 . ; Write to keyboard buffer
14B6 . ;
14B9 . ; Increment what's at 0x2074
14BA . ; load what's at 0x2077
14BD . ; return if it's not zero
14BE . ;
14BF . ; A = 0x2065
14C2 . ;
14C5 . ; return if [0x2065] | [0x2051] != 0
175B . ; Initialize start of screen RAM and wipe attribute RAM to 0xff
175E . ; B = 0x0a
1760 . ; D = 1
1762 . ; push B, D
1763 . ;
1764 . ; Display wait message
1767 . ; pop D
1768 . ; disable interrupts(???)
1769 . ; HL = 0x217b
176C . ; E = 0x33
176E . ; C = 1
1770 . ; A = 0
1771 . ; 0x21ae = A
1774 . ; A = C
1775 . ; 0x21ad = A
1778 . ; push D,H
1779 . ;
177A . ; A=D
177B . ; or A
177C . ; load A from HL
177D . ; store it in 0x21af
1780 . ; if A is 0 call X18ae
1783 . ; call X18a3
1786 . ; pop H,D
17BE . ; DE = 0x17ec
17C1 . ; B = 7
17C3 . ; HL = 0x21cc
17C6 . ; Initialize 0x21cc to Wait message
17C9 . ; HL = 0xcc71
17CC . ; retarget screen ram to display wait message
17DC . ; DE = 0x17f3
17DF . ; B = 11
17E1 . ; store
18CD . ; Write READ command to NVR latch
18DD . ; Write 0x2fh (standby) to nvr latch
18E1 . ; HL=X21d3
18E4 . ; B= 14 -- we're reading 14 bits
18EF . ; wait for NVR clock L
18F2 . ; shft bit out of nvr
18F9 . ; wait for NVR clock H
18FC . ; read bit and store it in memory
1903 . ; wait for NVR clock L
1907 . ; read next bit
190A . ; send standby
190E . ; DE=0x21d3
1911 . ; B = 14
1913 . ; HL = 0
1916 . ;
1917 . ; load next char
1918 . ; and with NVR data bit
191A . ; rotate NVR bit to high bit
1924 . ; Store the finished data in 21af and 21ae
1928 . ; Load accumulator from 0x21ae -- (0x42)
192B . ; B = 0xff
192D . ; increment B
192E . ; subtract 0x0a from accumulator
1930 . ; repeat while accumulator is positive
1933 . ; add 0x0a to accumulator
1935 . ; HL = 0x21d3
1938 . ; E = 0x23
193A . ; D = 0x14
193C . ;
193D . ; HL++
193E . ; D--
193F . ; repeat until D is zero
1942 . ; Store 0x2f in 21e7
1944 . ; HL = 0x21d3
1947 . ; copy A to E
1948 . ; clear D
194A . ; add DE to HL -- calculate address of bit A
194B . ; Store 0x22 in M
194D . ; HL = 0x21d3
1950 . ; A = 0x0a
1952 . ; A = 0x0a + B
1960 . ;
1964 . ; Flags Buffer & C
1969 . ; Return if B is negative