1; GEOS KERNAL by Berkeley Softworks
2; reverse engineered by Maciej Witkowiak, Michael Steil
3;
4; Dialog box: misc
5
6.include "const.inc"
7.include "geossym.inc"
8.include "geosmac.inc"
9.include "config.inc"
10.include "gkernal.inc"
11.include "c64.inc"
12
13.import DBGFOffsTop
14.import DBGFOffsLeft
15.import CalcDialogCoords
16.import DBGFNameTable
17.import DBGFArrowX
18.import DBGFileSelected
19.import DBGFilesFound
20.import DBGFTableIndex
21.import L8871
22
23.import Ddec
24.import InvertRectangle
25.import PutString
26.import Rectangle
27.import SetPattern
28.import BBMult
29.import CopyString
30.import NormalizeX
31.import Ddiv
32.import IsMseInRegion
33
34.ifdef wheels
35.import DoKeyboardShortcut
36.import FetchRAM
37.import CallRoutine
38.endif
39
40.global DBGFDoArrow
41.global DBGFPressVector
42.global DBGFilesHelp2
43.global DBGFilesHelp3
44.global DBGFilesHelp5
45.global DBGFilesHelp7
46
47.ifdef wheels
48.global SetupRAMOpCall
49.endif
50
51.segment "dlgbox1j"
52
53DBGFPressVector:
54	lda mouseData
55	bmi @2
56	jsr DBGFilesHelp7
57	clc
58	lda r2L
59	adc #$45
60	sta r2H
61	jsr IsMseInRegion
62	beq @2
63	jsr DBGFilesHelp6
64	jsr DBGFilesHelp7
65	lda mouseYPos
66	sub r2L
67	sta r0L
68	LoadB r0H, 0
69	sta r1H
70	LoadB r1L, 14
71	ldx #r0
72	ldy #r1
73	jsr Ddiv
74	lda r0L
75	add DBGFTableIndex
76	cmp DBGFilesFound
77	bcc @1
78	ldx DBGFilesFound
79	dex
80	txa
81@1:	sta DBGFileSelected
82	jsr DBGFilesHelp6
83	jsr DBGFilesHelp2
84.ifdef wheels_dlgbox_dblclick
85	lda dblClickCount
86	beq @X
87	ldy dblDBData
88	dey
89	jmp DoKeyboardShortcut
90@X:	lda #CLICK_COUNT
91	sta dblClickCount
92.endif
93@2:	rts
94
95DBGFDoArrow:
96.ifdef wheels_dlgbox_features
97.import dbFieldWidth
98	; which icon inside the top/bot/up/down image was the mouse on?
99	lda mouseXPos+1
100	lsr
101	lda mouseXPos
102	ror
103	lsr
104	lsr ; / 16
105	sec
106	sbc DBGFArrowX
107	lsr
108	tay
109	cpy #4
110	bcc @1
111	rts
112@1:	lda DoArrowTabL,y
113	ldx DoArrowTabH,y
114	jmp CallRoutine
115
116.define DoArrowTab DBGFDoArrowTop, DBGFDoArrowBottom, DBGFDoArrowUp, DBGFDoArrowDown
117
118DoArrowTabL:
119	.lobytes DoArrowTab
120DoArrowTabH:
121	.hibytes DoArrowTab
122
123DBGFDoArrowTop:
124	lda DBGFTableIndex
125	bne @1
126	rts
127@1:	lda #0
128	beq DBGFDoArrowFuncCommon
129
130DBGFDoArrowBottom:
131	ldx DBGFilesFound
132	dex
133	stx r0L
134	lda #0
135	sta r0H
136	sta r1H
137	lda #5
138	sta r1L
139	ldx #r0
140	ldy #r1
141	jsr Ddiv
142	jsr BBMult
143	lda r0L
144	bra DBGFDoArrowFuncCommon
145
146DBGFDoArrowDown:
147	lda DBGFTableIndex
148	add #5
149	cmp DBGFilesFound
150	bcc DBGFDoArrowFuncCommon
151	rts
152
153DBGFDoArrowUp:
154	lda DBGFTableIndex
155	bne @1
156	rts
157@1:	sec
158	sbc #5
159DBGFDoArrowFuncCommon:
160	sta DBGFTableIndex+1
161	sta DBGFTableIndex
162	jsr SetupRAMOpCall
163	jsr FetchRAM
164	jsr DBGFilesHelp2
165	jmp DBGFilesHelp5
166
167SetupRAMOpCall:
168	sta r1L
169	lda #5
170	sta r0L
171	lda dbFieldWidth
172	sta r2L
173	ldx #r2
174	ldy #r0L
175	jsr BBMult ; r2 = 5 * dbFieldWidth (count)
176	lda dbFieldWidth
177	sta r0L
178	ldx #r1
179	ldy #r0L
180	jsr BBMult ; r1 = arg * dbFieldWidth (REU offset)
181	clc
182	lda r1L
183	adc #<$E080
184	sta r1L
185	lda r1H
186	adc #>$E080 ; REU address
187	sta r1H
188	LoadW r0, fileTrScTab ; CBM address
189	sta r3L ; REU bank 0
190	rts
191.else
192; DBGFDoArrow:
193	jsr DBGFilesHelp6
194	LoadB r0H, 0
195	lda DBGFArrowX
196	asl
197	asl
198	asl
199	rol r0H
200	addv 12
201	sta r0L
202	bcc @1
203	inc r0H
204@1:
205.ifdef bsw128
206	lda r0H
207	ora L8871
208	sta r0H
209	ldx #r0
210	jsr NormalizeX
211.endif
212	ldx DBGFTableIndex
213	CmpW r0, mouseXPos
214	bcc @2
215	dex
216	bpl @3
217@2:	inx
218	lda DBGFilesFound
219	sub DBGFTableIndex
220	cmp #6
221	bcc @4
222@3:	stx DBGFTableIndex
223@4:	CmpB DBGFTableIndex, DBGFileSelected
224	bcc @5
225	sta DBGFileSelected
226@5:	addv 4
227	cmp DBGFileSelected
228	bcs @6
229	sta DBGFileSelected
230@6:	jsr DBGFilesHelp2
231	jmp DBGFilesHelp5
232.endif
233
234DBGFilesHelp2:
235.ifdef wheels_dlgbox_features
236	lda DBGFTableIndex+1
237	sec
238	sbc DBGFTableIndex
239	ldx #r0
240	jsr DBGFilesHelp4
241	MoveW DBGFNameTable, r5
242	ldy #r5
243	jmp CopyString
244.else
245	lda DBGFileSelected
246	jsr DBGFilesHelp3
247	ldy #r1
248	jmp CopyString
249
250DBGFilesHelp3:
251	ldx #r0
252	jsr DBGFilesHelp4
253	MoveW DBGFNameTable, r1
254	rts
255.endif
256
257DBGFilesHelp4:
258	sta r0L
259.ifdef wheels_dlgbox_features
260	MoveB dbFieldWidth, r1L
261.else
262	LoadB r1L, 17
263.endif
264	txa
265	pha
266	ldy #r0
267	ldx #r1
268	jsr BBMult
269	pla
270	tax
271	lda r1L
272.ifdef wheels_size_and_speed
273	sta zpage,x
274	.assert <fileTrScTab = 0, error, "fileTrScTab must be page-aligned!"
275	lda #>fileTrScTab
276.else
277	add #<fileTrScTab
278	sta zpage,x
279	lda #>fileTrScTab
280	adc #0
281.endif
282	sta zpage+1,x
283	rts
284
285DBGFilesHelp5:
286.ifdef wheels_dlgbox_features
287	PushW g_rightMargin
288	PushB g_currentMode
289	LoadB g_currentMode, $40
290	lda #0
291	jsr DBGFilesHelp8
292	clc
293	lda r2H
294	adc #$38
295	sta r2H
296	lda #0
297	jsr SetPattern
298	jsr Rectangle
299	lda #0
300	lda r4H
301	sta g_rightMargin+1
302	lda r4L
303	sta g_rightMargin
304	lda #0
305	sta r15L
306	ldx #30
307	jsr DBGFilesHelp4
308LF843:	lda r15L
309	jsr DBGFilesHelp8
310	lda r3H
311	sta r11H
312	lda r3L
313	sta r11L
314	lda r2L
315	add #9
316	sta r1H
317	lda r14H
318	sta r0H
319	lda r14L
320	sta r0L
321	jsr PutString
322	clc
323	lda dbFieldWidth
324	adc r14L
325	sta r14L
326	bcc LF86E
327	inc r14H
328LF86E:	inc r15L
329	lda r15L
330	cmp #5
331	bne LF843
332	jsr DBGFilesHelp6
333	PopB g_currentMode
334	PopW g_rightMargin
335	rts
336.else
337	PushW g_rightMargin
338	lda #0
339	jsr DBGFilesHelp8
340	MoveW r4, g_rightMargin
341	LoadB r15L, 0
342	jsr SetPattern
343
344	lda DBGFTableIndex
345	ldx #r14
346	jsr DBGFilesHelp4
347	LoadB g_currentMode, SET_BOLD
348@1:	lda r15L
349	jsr DBGFilesHelp8
350
351	jsr Rectangle
352	MoveW r3, r11
353	lda r2L
354	addv 9
355	sta r1H
356	MoveW r14, r0
357	jsr PutString
358	AddVW 17, r14
359	inc r15L
360	CmpBI r15L, 5
361	bne @1
362	jsr DBGFilesHelp6
363	LoadB g_currentMode, NULL
364	PopW g_rightMargin
365	rts
366.endif
367
368DBGFilesHelp6:
369	lda DBGFileSelected
370	sub DBGFTableIndex
371	jsr DBGFilesHelp8
372	jmp InvertRectangle
373
374DBGFilesHelp7:
375	clc
376	jsr CalcDialogCoords
377	AddB DBGFOffsLeft, r3L
378	bcc @1
379	inc r3H
380@1:	addv $7c
381	sta r4L
382	lda #0
383	adc r3H
384	sta r4H
385	AddB DBGFOffsTop, r2L
386	adc #$58
387	sta r2H
388	rts
389
390DBGFilesHelp8:
391	sta r0L
392	LoadB r1L, 14
393	ldy #r1
394	ldx #r0
395	jsr BBMult
396	jsr DBGFilesHelp7
397	AddB r0L, r2L
398	clc
399.ifdef wheels_dlgbox_features
400	adc #13
401.else
402	adc #14
403.endif
404	sta r2H
405	inc r2L
406.ifdef wheels_size ; code reuse
407	jsr IncR3
408.else
409	dec r2H
410	inc r3L
411	bne @1
412	inc r3H
413.endif
414@1:	ldx #r4
415.ifdef wheels_size_and_speed
416	jmp Ddec
417.else
418	jsr Ddec
419	rts
420.endif
421
422.ifdef wheels_size ; code reuse
423.global IncR3
424IncR3:	inc r3L
425	bne @1
426	inc r3H
427@1:	rts
428.endif
429
430