-
Notifications
You must be signed in to change notification settings - Fork 2
/
PDD1.dcDisASM
359 lines (283 loc) · 13.1 KB
/
PDD1.dcDisASM
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
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
Header ;Tandy PDD1 firmware reverse engineering
Header ;By BiggRanger
orig 0xF000
FileIn c:\dcDisASM\PDD1\PDD1.BIN
FileOut c:\dcDisasm\PDD1\PDD1.ASM
;FileOptions EPROM boot loader (TMS320 only)
;file out can be .ASM, .RTF, .HTML
include c:\dcDisasm\CPU_INC\6301.INC
;;flag asciiOnly ;only prints ascii characters in output
;;flag colorJump green
;;flag colorCall purple
;;flag colorReturn red
;;flag colorBox brown
;;flag colorCode black
;;flag colorValues orange
;;flag colorLabels cyan
;;flag colorComment green
;flag noSymbolTable
;flag noJumpLines
flag radixRepresentationCPP ;Intel, CPP, or Motorola, this only affects output.
flag showOpCodeHEX
flag showOpCodeASCII
;;flag showMnemonicComments
;TYPE = byte, word, dword, qword
;REPRESENTATION = asc, hex, dec, bin
;CODE address label [COMMENT]
;IOLABEL ioAddress label [COMMENT]
;DATA address TYPE REPRESENTATION [LABEL [COMMENT]]
;TABLE addressStart length TYPE [REPRESENTATION [LABEL [COMMENT]]]]
;BYTEARRAY addressStart length REPRESENTATION [COMMENT]
;COMMENT adderss COMMENT
;VIEW address REPRESENTATION [COMMENT]
;BOX addressStart addressEnd [COMMENT]
;IGNORE addressStart addressEnd [COMMENT]
;----------------------------------------------------------
;Memory Map of PDD (using mode 6):
;----------------------------------------------------------
;0000-001F Internal Registers (see below)
;0080-00FF Internal RAM
;4000-4003 CPLD (Glue Logic + Hardware IO Control)
;8000-87FF External RAM (2K)
;F000-FFFF Internal ROM (4K)
;----------------------------------------------------------
;I/O ports
;Port.Bit I/O Pin# ID Function
;----------------------------------------------------------
;Port1.B0 Input Pin18 P10 CTS
;Port1.B1 Input Pin19 P11 DSR
;Port1.B2 Output Pin20 P12 RTS
;Port1.B3 Output Pin22 P13 DTR
;Port1.B4 Output Pin23 P14 PS Alarm (Low Battery LED)
;Port1.B5 Output Pin24 P15 LED101 (Drive Access LED)
;Port1.B6 Output Pin25 P16 To MA7340
;Port1.B7 Output Pin26 P17 SCAN
;Port2.B0 Input Pin11 P20 Mode (pulled Low)
;Port2.B1 Input Pin12 P21 Mode (pulled Hi)
;Port2.B2 Input Pin13 P22 (SCI) CLKOUT from CPLD for BAUD rate
;Port2.B3 Input Pin14 P23 (SCI) /RXD
;Port2.B4 Output Pin15 P24 (SCI) /TXD
;----------------------------------------------------------
;----------------------------------------------------------
;symbols for CPLD
;----------------------------------------------------------
data 0x4000 byte hex (CPLD)4000 ;set = stepper motor???
data 0x4001 byte hex (CPLD)4001 ;get = 1111_0000 dip switches
; ;set = 1111_0000 BAUD clock
data 0x4002 byte hex (CPLD)4002
data 0x4003 byte hex (CPLD)4003
;----------------------------------------------------------
;----------------------------------------------------------
;symbols for Internal RAM
;----------------------------------------------------------
data 0x0080 byte hex (RAM_INT)BAUD_Rate ;BAUD Rate from switch positions
data 0x00E5 word hex (RAM_INT)StackPointerStorage ;2 byte stack storage
;----------------------------------------------------------
;symbols for External RAM
;----------------------------------------------------------
data 0x842B byte hex (RAM_EXT)ArrayStorage1??
data 0x8515 byte hex (RAM_EXT)CodeExecutionAddress ;Where IPL code is launched (via S9)
data 0x8615 byte hex (RAM_EXT)ArrayStorage2??
data 0x862A byte hex (RAM_EXT)ArrayStorage3??
data 0x87FF byte hex (RAM_EXT)Stack ;Top of Stack
;----------------------------------------------------------
;----------------------------------------------------------
;start documenting code
;----------------------------------------------------------
code 0xF000 ProgramStart ;mask all interrupts
comment 0xF001 ;set stack to 87FF (top of EXT RAM)
view 0xF004 bin ;port 1 settings
view 0xF008 bin ;port 1 settings
view 0xF00C bin ;port 3+4 settings
;----------------------------------------------------------
box 0xF017 0xF036 ;Read dip switches and setup BAUD Rate
comment 0xF017 ;get switch positions from CPLD, put in ACCB
view 0xF01A bin ;Mask 1111_0000, look at only dip switch
comment 0xF01C ;push to stack
comment 0xF01D ;bit shift down 4x
comment 0xF021 ;set X to address of lookup table FFB7
comment 0xF024 ;add ACCB to X (a + address of lookup table)
comment 0xF025 ;load into ACCA BAUD rate value from lookup table
comment 0xF027 ;store ACCA value (BAUD Rate) into address 0080
comment 0xF029 ;send this value to the CPLD, this is the clock divider for the SIO clock
view 0xF02C bin ;BIT 5 = SCI TX_DATA
view 0xF030 bin ;Value -> SCI clock is from Port 2.2
view 0xF034 bin ;set TxRx control and status
;----------------------------------------------------------
comment 0xF038 ;clear INT RAM 0081-00FF
;----------------------------------------------------------
box 0xF04C 0xF053 ;Read dip switches and set operation mode
comment 0xF04C ;get the masked dip switch values from the stack
view 0xF04D bin ;C is clear for 0xD0 and up
view 0xF04F hex ;Mode=operation jump to code
view 0xF051 bin ;C is set for 0x30 and down
view 0xF053 hex ;Mode=init jump to code - Fall over to FDC mode
;----------------------------------------------------------
code 0xF055 START_FDC_MODE
comment 0xF05B ;clear INT RAM 008D -> 0x23 bytes
;----------------------------------------------------------
box 0xF0F0 0xF10C ;Switch/Case Block For FDC commands
comment 0xF0F0 ;set X to table FFC7
comment 0xF0F3 ;load value from 008E into ACCA
comment 0xF0F5 ;compare with table
comment 0xF0F7 ;if at this position in the table, branch
comment 0xF0F9 ;+X skip address HH
comment 0xF0FA ;+X skip address LL
comment 0xF0FB ;+X next entry in table
comment 0xF0FC ;is X at FFE8 (end of table)
comment 0xF0FF ;no, loop again
comment 0xF101 ;load C1 into ACCA (we passed end of table)
comment 0xF103 ;store ACCA in 008D
comment 0xF105 ;load X with F1EB (this is "Case Default")
comment 0xF10A ;load into X value in X+1 (address HH+LL)
comment 0xF10C ;jump to sub at location in X
;----------------------------------------------------------
view 0xF184 bin ;test bit 5 TX_READY
view 0xF192 bin ;test bit 5 TX_READY
;----------------------------------------------------------
box 0xFAF5 0xFAFF ;Switch/Case Block For operation commands
comment 0xFAF5 ;load value from 00E1 into ACCB
comment 0xFAF8 ;set X to table FB4E
comment 0xFAFB ;add ACCB to X
comment 0xFAFC ;load X with value from table
comment 0xFAFE ;jump to sub at X
;----------------------------------------------------------
;code 0xF08B _EntryPoint_SpecialRomJumpBootLoader
;code 0xF9F1 _sub_xxxxxx__Private_Clear_0083
;code 0xFB60 _sub_Clear_00D8_00D9
;----------------------------------------------------------
;naming things to keep it cleaner
;----------------------------------------------------------
;code 0xF1F8 _jsrAdr(F0F0)_Default_code_private_1
;code 0xF1FA _jsrAdr(F0F0)_Default_code_private_2
;----------------------------------------------------------
;identified subroutines
;----------------------------------------------------------
;----------------------------------------------------------
box 0xF9AD 0xF9B5 ;SUB - CLEAR MEMORY (X=addressStart D=Length)
code 0xF9AD (sub)ClearMemoryRange
;----------------------------------------------------------
;----------------------------------------------------------
box 0xF9B6 0xF9C5 ;SUB - DELAY LOOP
code 0xF9B6 (sub)Delay_14_units
code 0xF9BA (sub)Delay_1_unit
code 0xF9BC (sub)Delay=ACCB
code 0xF9BE (subI)Delay
;----------------------------------------------------------
;----------------------------------------------------------
;variable tables
;----------------------------------------------------------
table 0xF4A8 0x07 byte hex (table)For_0xF498 ;variable lookup table
table 0xF8AC 0x0E byte hex (table)For_0xF75D ;variable lookup table
table 0xF9A5 0x04 byte hex (table)For_0xF952 ;variable lookup table (stepper motor stuff?)
table 0xF9A9 0x04 byte hex (table)For_0xF990 ;variable lookup table (stepper motor stuff?)
table 0xFFE8 0x06 word hex (dummyData) ;blank space
;----------------------------------------------------------
;----------------------------------------------------------
;value table for 0xF021 - BAUD Rate
;----------------------------------------------------------
box 0xFFB7 0xFFC6 ;BAUD Rate lookup - variable table for 0xF021 (for switch settings)
table 0xFFB7 0x10 byte bin (table)BAUD_Rates
comment 0xFFB7 ;BAUD=9600 - Test Mode 0
comment 0xFFB8 ;BAUD=19200
comment 0xFFB9 ;BAUD=19200 - Test Mode 1
comment 0xFFBA ;BAUD=150 - FDC Mode
comment 0xFFBB ;BAUD=300
comment 0xFFBC ;BAUD=600
comment 0xFFBD ;BAUD=1200
comment 0xFFBE ;BAUD=2400
comment 0xFFBF ;BAUD=4800
comment 0xFFC0 ;BAUD=9600
comment 0xFFC1 ;BAUD=19200
comment 0xFFC2 ;BAUD=38400
comment 0xFFC3 ;BAUD=76800
comment 0xFFC4 ;BAUD=4800 - Brother Mode
comment 0xFFC5 ;BAUD=9600
comment 0xFFC6 ;BAUD=19200
;----------------------------------------------------------
;----------------------------------------------------------
;switch table for 0xF0F0 - FDC Emulation Mode Commands - (Symbol/address lookup)
;----------------------------------------------------------
box 0xFFC7 0xFFE7 ;FDC Emulation mode - Switch Table For 0xF0F0 (Symbol/address lookup)
;table 0xFFC7 //will not work for this because of mixed data types.
data 0xFFC7 byte asc (table)FDC_Commands
data 0xFFC8 word hex
data 0xFFCA byte asc
data 0xFFCB word hex
data 0xFFCD byte asc
data 0xFFCE word hex
data 0xFFD0 byte asc
data 0xFFD1 word hex
data 0xFFD3 byte asc
data 0xFFD4 word hex
data 0xFFD6 byte asc
data 0xFFD7 word hex
data 0xFFD9 byte asc
data 0xFFDA word hex
data 0xFFDC byte asc
data 0xFFDD word hex
data 0xFFDF byte asc
data 0xFFE0 word hex
data 0xFFE2 byte asc
data 0xFFE3 word hex
data 0xFFE5 byte asc
data 0xFFE6 word hex
comment 0xFFC7 ;F = FDC Format with verify
comment 0xFFCA ;G = FDC Format without verify
comment 0xFFCD ;R = FDC Read one logical sector
comment 0xFFD0 ;W = FDC Write one logical sector with verify
comment 0xFFD3 ;X = FDC Write one logical sector without verify
comment 0xFFD6 ;A = FDC Read ID section
comment 0xFFD9 ;B = FDC Write ID section with verify
comment 0xFFDC ;C = FDC Write ID section without verify
comment 0xFFDF ;S = FDC Search ID section
comment 0xFFE2 ;D = FDC Check drive condition
comment 0xFFE5 ;M = FDC Change modes
comment 0xFFC8 ;address of subroutine for F
comment 0xFFCB ;address of subroutine for G
comment 0xFFCE ;address of subroutine for R
comment 0xFFD1 ;address of subroutine for W
comment 0xFFD4 ;address of subroutine for X
comment 0xFFD7 ;address of subroutine for A
comment 0xFFDA ;address of subroutine for B
comment 0xFFDD ;address of subroutine for C
comment 0xFFE0 ;address of subroutine for S
comment 0xFFE3 ;address of subroutine for D
comment 0xFFE6 ;address of subroutine for M
code 0xF2AD (sub)FDC_F ;F = Format with verify
code 0xF2AA (sub)FDC_G ;G = Format without verify
code 0xF1FD (sub)FDC_R ;R = Read one logical sector
code 0xF214 (sub)FDC_W ;W = Write one logical sector with verify
code 0xF211 (sub)FDC_X ;X = Write one logical sector without verify
code 0xF251 (sub)FDC_A ;A = Read ID section
code 0xF26B (sub)FDC_B ;B = Write ID section with verify
code 0xF268 (sub)FDC_C ;C = Write ID section without verify
code 0xF35B (sub)FDC_S ;S = Search ID section
code 0xF3C8 (sub)FDC_D ;D = Check drive condition
code 0xF400 (sub)FDC_M ;M = Change modes
code 0xF1E8 (sub)FDC_Default ;this is a default, entry not in table
;----------------------------------------------------------
;----------------------------------------------------------
;switch table for for FAF8 - Operation Commands (address lookup)
;----------------------------------------------------------
box 0xFB4E 0xFB5F ;Operation Commands - Switch Table For 0xFAF8 (address lookup)
table 0xFB4E 0x12 word hex (table)Operation_Commands
comment 0xFB4E ;operation command 0x0 Create/Access a directory refrence
comment 0xFB50 ;operation command 0x1 Open a file
comment 0xFB52 ;operation command 0x2 Close a file
comment 0xFB54 ;operation command 0x3 Read data from a file
comment 0xFB56 ;operation command 0x4 Write data to a file
comment 0xFB58 ;operation command 0x5 Delete a file
comment 0xFB5A ;operation command 0x6 Format a disk
comment 0xFB5C ;operation command 0x7 Get drive status
comment 0xFB5E ;operation command 0x8 Change to FDC mode
code 0xFB93 (sub)operation_0x0 ;operation command 0x0 Create/Access a directory refrence
code 0xFD02 (sub)operation_0x1 ;operation command 0x1 Open a file
code 0xFCD4 (sub)operation_0x2 ;operation command 0x2 Close a file
code 0xFE70 (sub)operation_0x3 ;operation command 0x3 Read data from a file
code 0xFEC0 (sub)operation_0x4 ;operation command 0x4 Write data to a file
code 0xFC73 (sub)operation_0x5 ;operation command 0x5 Delete a file
code 0xFB7A (sub)operation_0x6 ;operation command 0x6 Format a disk
code 0xFB72 (sub)operation_0x7 ;operation command 0x7 Get drive status
code 0xFB66 (sub)operation_0x8 ;operation command 0x8 Change to FDC mode
;----------------------------------------------------------