Subversion Repositories pentevo

Rev

Rev 291 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
261 ddp 1
;  4                              5678901234567
2
; ���������������������������������������������Ŀ
3
; �Detecting mouse...                           �03
4
; �FF FA AA 00                                  �
5
; �Customization...                             �
6
; �F3 FA C8 FA F3 FA 64 FA F3 FA 50 FA          �
7
; �F2 FA 03                                     �
8
; �E8 FA 02 FA E6 FA F3 FA 64 FA F4 FA          �
9
; �Let's go!                                    �
10
; �08 00 00 00                    �����������Ŀ �10
11
; �                               ����        � �11
12
; �                               ��L�  M   R � �12
13
; �                               ����        � �13
14
; �                               �           � �14
15
; �                               � Wheel = 1 � �15
16
; �                               �           � �16
17
; �                               � X  =  123 � �17
18
; �                               � Y  =   58 � �18
19
; �                               ������������� �
20
; �����������������������������������������������
21
;  4                              5678901234567
22
;
23
;--------------------------------------
24
;
25
.EQU    TPSM_BYTE1      =0
26
.EQU    TPSM_BYTE2      =1
27
.EQU    TPSM_BYTE3      =2
28
.EQU    TPSM_BYTE4      =3
29
.EQU    TPSM_X0         =4
30
.EQU    TPSM_X1         =5
31
.EQU    TPSM_Y          =6
32
.EQU    TPSM_Z          =7
33
.EQU    TPSM_BTN        =8
34
.EQU    TPSM_ID         =9
35
;
36
;--------------------------------------
37
;
38
.EQU    PS2M_BIT_PARITY =0
39
.EQU    PS2M_BIT_ACKBIT =1      ; �ਭ�� ACK-���
40
.EQU    PS2M_BIT_TX     =7      ; ��।��
41
.EQU    PS2M_BIT_READY  =7
42
 
43
.MACRO  PS2M_DATALINE_UP
44
        CBI     DDRD,7
45
        SBI     PORTD,7
46
.ENDMACRO
47
 
48
.MACRO  PS2M_DATALINE_DOWN
49
        CBI     PORTD,7
50
        SBI     DDRD,7
51
.ENDMACRO
52
 
53
.MACRO  PS2M_CLOCKLINE_UP
54
        CBI     DDRE,5
55
        SBI     PORTE,5
56
.ENDMACRO
57
 
58
.MACRO  PS2M_CLOCKLINE_DOWN
59
        CBI     PORTE,5
60
        SBI     DDRE,5
61
.ENDMACRO
62
;
63
;--------------------------------------
64
;
65
.DSEG
66
PS2M_BIT_COUNT: .BYTE   1
67
PS2M_DATA:      .BYTE   1
68
PS2M_RAW_READY: .BYTE   1
69
PS2M_RAW_CODE:  .BYTE   1
70
PS2M_FLAGS:     .BYTE   1
71
PS2M_TIMEOUT:   .BYTE   2
72
.CSEG
73
;
74
;--------------------------------------
75
;
76
MSG_TPSM_1:
77
        .DB     $16,37,15,"Wheel ="
78
MSG_TPSM_2:
79
        .DB     $16,37,12,"L   M   R"
80
        .DB     $16,37,17,"X  =",$16,37,18,"Y  =",0,0
81
MSG_TPSM_3:
82
        .DB     $16, 4,10,$15,$DF,0
83
;
84
;--------------------------------------
85
;
86
WIND_T_PS2M_1:
87
        .DB     3,2,47,19,$DF,$01
88
WIND_T_PS2M_2:
89
        .DB     9,10,34,4,$AF,$01
90
WIND_T_PS2M_3:
91
        .DB     35,10,13,10,$DF,$00
92
;
93
;--------------------------------------
94
;
95
EXT_INT5:
96
        PUSH    TEMP
97
        IN      TEMP,SREG
98
        PUSH    TEMP
99
        PUSH    COUNT
100
        PUSH    DATA
101
        LDS     DATA,PS2M_DATA
102
        LDS     COUNT,PS2M_BIT_COUNT
103
        LDS     TEMP,PS2M_FLAGS
104
        SBRC    TEMP,PS2M_BIT_TX
105
        RJMP    INT5TX_0
106
 
107
        CPI     COUNT,9
108
        BREQ    INT5RX9
109
        CPI     COUNT,10
110
        BRCC    INT5RXS
111
        TST     COUNT
112
        BRNE    INT5RX1
113
;start bit
114
        SBIC    PIND,7   ; data line
115
        RJMP    INT5RX_CLR_D
116
        CBR     TEMP,(1<<PS2M_BIT_PARITY)
117
        INC     COUNT
118
        RJMP    INT5_EXIT
119
;data bits
120
INT5RX1:LSR     DATA
121
        SBIS    PIND,7   ; data line
122
        RJMP    INT5RX2
123
        ORI     DATA,0B10000000
124
        EOR     TEMP,ONE
125
INT5RX2:INC     COUNT
126
        RJMP    INT5_EXIT
127
;parity bit
128
INT5RX9:SBIC    PIND,7   ; data line
129
        EOR     TEMP,ONE
130
        SBRS    TEMP,PS2M_BIT_PARITY
131
        RJMP    INT5RX_CLR_D
132
        INC     COUNT
133
        RJMP    INT5_EXIT
134
;stop bit
135
INT5RXS:SBIS    PIND,7   ; data line
136
        RJMP    INT5RX_CLR_D
137
 
138
        STS     PS2M_RAW_READY,COUNT
139
        STS     PS2M_RAW_CODE,DATA
140
 
141
INT5RX_CLR_F:
142
        CLR     TEMP
143
INT5RX_CLR_D:
144
        CLR     DATA
145
        CLR     COUNT
146
        RJMP    INT5_EXIT
147
;-------
148
INT5TX_0:
149
        CPI     COUNT,9
150
        BREQ    INT5TX9
151
        CPI     COUNT,10
152
        BREQ    INT5TXS
153
        CPI     COUNT,11
154
        BRCC    INT5TXA
155
        TST     COUNT
156
        BRNE    INT5TX1
157
;start bit
158
        SBR     TEMP,(1<<PS2M_BIT_PARITY)
159
        INC     COUNT
160
        RJMP    INT5_EXIT
161
;data bits
162
INT5TX1:ROR     DATA
163
        BRCC    INT5TX2
164
        PS2M_DATALINE_UP
165
        EOR     TEMP,ONE
166
        INC     COUNT
167
        RJMP    INT5_EXIT
168
INT5TX2:PS2M_DATALINE_DOWN
169
        INC     COUNT
170
        RJMP    INT5_EXIT
171
;parity bit
172
INT5TX9:SBRC    TEMP,PS2M_BIT_PARITY
173
        RJMP    INT5TXP
174
        PS2M_DATALINE_DOWN
175
        INC     COUNT
176
        RJMP    INT5_EXIT
177
INT5TXP:PS2M_DATALINE_UP
178
        INC     COUNT
179
        RJMP    INT5_EXIT
180
;stop bit
181
INT5TXS:PS2M_DATALINE_UP
182
        INC     COUNT
183
        RJMP    INT5_EXIT
184
;ack-bit
185
INT5TXA:CLR     TEMP
186
        SBIS    PIND,7   ; data line
187
        LDI     TEMP,(1<<PS2M_BIT_ACKBIT)
188
        CLR     DATA
189
        CLR     COUNT
190
 
191
INT5_EXIT:
192
        STS     PS2M_BIT_COUNT,COUNT
193
        STS     PS2M_DATA,DATA
194
        STS     PS2M_FLAGS,TEMP
195
        POP     DATA
196
        POP     COUNT
197
        POP     TEMP
198
        OUT     SREG,TEMP
199
        POP     TEMP
200
        RETI
201
;
202
;--------------------------------------
203
;
204
TESTMOUSE:
205
        ANDI    FLAGS1,0B11111011
206
        ORI     FLAGS1,0B00000010
207
        LDIZ    MLMSG_MOUSE_TEST*2
208
        CALL    PRINTMLSTR
209
        ORI     FLAGS1,0B00000100
210
 
211
        GETMEM  10
212
 
213
T_PSM_RESTART:
214
        CLI
215
        PS2M_DATALINE_UP
216
        PS2M_CLOCKLINE_UP
217
        IN      TEMP,EICRB
218
        ORI     TEMP,(1<<ISC51)|(0<<ISC50)
219
        OUT     EICRB,TEMP
220
        IN      TEMP,EIMSK
221
        ORI     TEMP,(1<<INT5)
222
        OUT     EIMSK,TEMP
223
        STS     PS2M_FLAGS,NULL
224
        STS     PS2M_BIT_COUNT,NULL
225
        STS     PS2M_RAW_READY,NULL
226
        SEI
227
 
228
        LDIZ    WIND_T_PS2M_1*2
229
        CALL    WINDOW
230
        LDI     XL,4
231
        LDI     XH,3
232
        RCALL   SCR_SET_CURSOR
233
        RCALL   UART_CRLF
234
        LDIZ    MLMSG_MOUSE_DETECT*2
235
        CALL    PRINTMLSTR
236
        LDI     XL,4
237
        LDI     XH,4
238
        RCALL   SCR_SET_CURSOR
239
        RCALL   UART_CRLF
240
;
241
;
242
T_PSM_DETECT_2:
243
        STS     PS2M_RAW_READY,NULL
244
        LDIZ    PS2M_TIMEOUT
245
        LDIW    2
246
        CALL    SET_TIMEOUT_MS
247
T_PSM_DETECT_1:
248
        LDS     TEMP,PS2M_RAW_READY
249
        TST     TEMP
250
        BRNE    T_PSM_DETECT_2
251
        LDIZ    PS2M_TIMEOUT
252
        CALL    CHECK_TIMEOUT_MS
253
        BRCC    T_PSM_DETECT_1
254
 
255
        LDI     DATA,$FF
256
        RCALL   HEXBYTE_FOR_DUMP
257
        RCALL   PS2M_SEND_BYTE
258
        BREQ    T_PSM_DETECT_FAIL0_A
259
        RCALL   PS2M_RECEIVE_BYTE
260
        BREQ    T_PSM_DETECT_FAIL0_A
261
        RCALL   HEXBYTE_FOR_DUMP
262
        CPI     DATA,$FA
263
        BRNE    T_PSM_DETECT_FAIL0_A
264
 
265
        STS     PS2M_RAW_READY,NULL
266
        LDIZ    PS2M_TIMEOUT
267
        LDIW    1000
268
        CALL    SET_TIMEOUT_MS
269
T_PSM_DETECT_4:
270
        LDS     TEMP,PS2M_RAW_READY
271
        TST     TEMP
272
        BRNE    T_PSM_DETECT_5
273
        LDIZ    PS2M_TIMEOUT
274
        CALL    CHECK_TIMEOUT_MS
275
        BRCC    T_PSM_DETECT_4
276
T_PSM_DETECT_FAIL2_A:
277
        RJMP    T_PSM_DETECT_FAIL2
278
;
279
T_PSM_DETECT_FAIL0_A:
280
        RJMP    T_PSM_DETECT_FAIL0
281
;
282
T_PSM_DETECT_5:
283
        LDS     DATA,PS2M_RAW_CODE
284
        RCALL   HEXBYTE_FOR_DUMP
285
        CPI     DATA,$AA
286
        BRNE    T_PSM_DETECT_FAIL2_A
287
        LDI     DATA,$00
288
        RCALL   T_PSM_DETECT_RECEIVE
289
; - - - - - - - - - - - - - - - - - - -
290
        LDI     XL,4
291
        LDI     XH,5
292
        RCALL   SCR_SET_CURSOR
293
        RCALL   UART_CRLF
294
        LDIZ    MLMSG_MOUSE_SETUP*2
295
        CALL    PRINTMLSTR
296
        LDI     XL,4
297
        LDI     XH,6
298
        RCALL   SCR_SET_CURSOR
299
        RCALL   UART_CRLF
300
 
301
        LDI     DATA,$F3
302
        RCALL   T_PSM_DETECT_SEND
303
        LDI     DATA,200
304
        RCALL   T_PSM_DETECT_SEND
305
 
306
        LDI     DATA,$F3
307
        RCALL   T_PSM_DETECT_SEND
308
        LDI     DATA,100
309
        RCALL   T_PSM_DETECT_SEND
310
 
311
        LDI     DATA,$F3
312
        RCALL   T_PSM_DETECT_SEND
313
        LDI     DATA,80
314
        RCALL   T_PSM_DETECT_SEND
315
 
316
        LDI     XL,4
317
        LDI     XH,7
318
        RCALL   SCR_SET_CURSOR
319
        RCALL   UART_CRLF
320
 
321
        LDI     DATA,$F2
322
        RCALL   T_PSM_DETECT_SEND
323
 
324
        STS     PS2M_RAW_READY,NULL
325
        LDIZ    PS2M_TIMEOUT
326
        LDIW    20
327
        CALL    SET_TIMEOUT_MS
328
T_PSM_DETECT_6:
329
        LDS     TEMP,PS2M_RAW_READY
330
        TST     TEMP
331
        BRNE    T_PSM_DETECT_7
332
        LDIZ    PS2M_TIMEOUT
333
        CALL    CHECK_TIMEOUT_MS
334
        BRCC    T_PSM_DETECT_6
335
        RJMP    T_PSM_DETECT_FAIL2
336
T_PSM_DETECT_7:
337
        LDS     DATA,PS2M_RAW_CODE
338
        STH     TPSM_ID,DATA
339
        RCALL   HEXBYTE_FOR_DUMP
340
        TST     DATA
341
        BREQ    T_PSM_DETECT_8
342
        CPI     DATA,3
343
        BREQ    T_PSM_DETECT_8
344
        RJMP    T_PSM_DETECT_FAIL2
345
 
346
T_PSM_DETECT_8:
347
        LDI     XL,4
348
        LDI     XH,8
349
        RCALL   SCR_SET_CURSOR
350
        RCALL   UART_CRLF
351
 
352
        LDI     DATA,$E8
353
        RCALL   T_PSM_DETECT_SEND
354
        LDI     DATA,$02
355
        RCALL   T_PSM_DETECT_SEND
356
 
357
        LDI     DATA,$E6
358
        RCALL   T_PSM_DETECT_SEND
359
 
360
        LDI     DATA,$F3
361
        RCALL   T_PSM_DETECT_SEND
362
        LDI     DATA,100
363
        RCALL   T_PSM_DETECT_SEND
364
 
365
        LDI     DATA,$F4
366
        RCALL   T_PSM_DETECT_SEND
367
 
368
        LDI     XL,4
369
        LDI     XH,9
370
        RCALL   SCR_SET_CURSOR
371
        RCALL   UART_CRLF
372
        LDIZ    MLMSG_MOUSE_LETSGO*2
373
        CALL    PRINTMLSTR
374
        RCALL   UART_CRLF
375
 
376
        RJMP    T_PSM_MAIN
377
;
378
;--------------------------------------
379
;
380
T_PSM_DETECT_SEND:
381
        RCALL   HEXBYTE_FOR_DUMP
382
        RCALL   PS2M_SEND_BYTE
383
        BREQ    T_PSM_DETECT_FAIL1
384
        RCALL   PS2M_RECEIVE_BYTE
385
        BREQ    T_PSM_DETECT_FAIL1
386
        RCALL   HEXBYTE_FOR_DUMP
387
        CPI     DATA,$FA
388
        BRNE    T_PSM_DETECT_FAIL1
389
        RET
390
;
391
;--------------------------------------
392
;
393
T_PSM_DETECT_RECEIVE:
394
        STH     TPSM_BYTE4,DATA         ; temporally
395
        RCALL   PS2M_RECEIVE_BYTE
396
        BREQ    T_PSM_DETECT_FAIL1
397
        RCALL   HEXBYTE_FOR_DUMP
398
        LDH     TEMP,TPSM_BYTE4         ; temporally
399
        CP      DATA,TEMP
400
        BRNE    T_PSM_DETECT_FAIL1
401
        RET
402
;
403
;--------------------------------------
404
;
405
T_PSM_DETECT_FAIL1:
406
        POPZ
407
T_PSM_DETECT_FAIL2:
408
        LDIZ    MLMSG_MOUSE_FAIL1*2
409
        RJMP    T_PSM_DETECT_FAILZ
410
 
411
T_PSM_DETECT_FAIL0:
412
        LDIZ    MLMSG_MOUSE_FAIL0*2
413
T_PSM_DETECT_FAILZ:
414
        PUSHZ
415
        RCALL   UART_CRLF
416
        LDIZ    WIND_T_PS2M_2*2
417
        CALL    WINDOW
418
        LDI     XL,10
419
        LDI     XH,11
420
        RCALL   SCR_SET_CURSOR
421
        POPZ
422
        CALL    PRINTMLSTR
423
        LDI     XL,10
424
        LDI     XH,12
425
        RCALL   SCR_SET_CURSOR
426
        LDIZ    MLMSG_MOUSE_RESTART*2
427
        CALL    PRINTMLSTR
428
 
429
T_PSM_WAITKEY:
430
        CALL    WAITKEY
431
        CPI     DATA,KEY_ESC
432
        BREQ    T_PSM_ESCAPE
433
        CPI     DATA,KEY_ENTER
434
        BRNE    T_PSM_WAITKEY
435
        RJMP    T_PSM_RESTART
436
 
437
T_PSM_ESCAPE:
277 ddp 438
        LDI     DATA,0B00000000
439
        MOV     INT6VECT,DATA
440
        LDI     TEMP,INT_CONTROL
441
        CALL    FPGA_REG
261 ddp 442
        CLR     DATA
443
        LDI     TEMP,SCR_MOUSE_TEMP
444
        RCALL   FPGA_REG
445
        CLR     DATA
446
        LDI     TEMP,SCR_MOUSE_X
447
        RCALL   FPGA_REG
448
        CLR     DATA
449
        LDI     TEMP,SCR_MOUSE_Y
450
        RCALL   FPGA_REG
451
        CLI
452
        PS2M_DATALINE_UP
453
        PS2M_CLOCKLINE_UP
454
        IN      TEMP,EIMSK
455
        CBR     TEMP,(1<<INT5)
456
        OUT     EIMSK,TEMP
457
        SEI
458
        ORI     FLAGS1,0B00000010
459
        FREEMEM 10
460
        RET
461
;
462
;--------------------------------------
463
;
464
T_PSM_MAIN:
465
        ANDI    FLAGS1,0B11111100
277 ddp 466
        LDI     DATA,0B00000010
467
        MOV     INT6VECT,DATA
468
        LDI     TEMP,INT_CONTROL
469
        CALL    FPGA_REG
261 ddp 470
 
471
        LDIZ    WIND_T_PS2M_3*2
472
        CALL    WINDOW
473
        LDIZ    MSG_TPSM_2*2
474
        LDH     TEMP,TPSM_ID
475
        TST     TEMP
476
        BREQ    T_PSM01
477
        LDIZ    MSG_TPSM_1*2
478
T_PSM01:RCALL   SCR_PRINTSTRZ
479
        LDI     TEMP,150
480
        STH     TPSM_X0,TEMP
481
        STH     TPSM_X1,NULL
482
        LDI     TEMP,120
483
        STH     TPSM_Y,TEMP
484
        STH     TPSM_Z,NULL
485
        STH     TPSM_BTN,NULL
486
 
487
        STS     PS2M_RAW_READY,NULL
488
 
489
T_PSM10:
490
        LDH     TEMP,TPSM_ID
491
        TST     TEMP
492
        BREQ    T_PSM11
493
        LDI     XL,45
494
        LDI     XH,15
495
        RCALL   SCR_SET_CURSOR
496
        LDH     DATA,TPSM_Z
497
        CALL    HEXHALF
498
T_PSM11:
499
        LDI     XL,41
500
        LDI     XH,17
501
        RCALL   SCR_SET_CURSOR
502
        LDH     XL,TPSM_X0
503
        LDH     XH,TPSM_X1
504
        CALL    DECWORD
505
 
506
        LDI     XL,41
507
        LDI     XH,18
508
        RCALL   SCR_SET_CURSOR
509
        LDH     XL,TPSM_Y
510
        CLR     XH
511
        CALL    DECWORD
512
 
513
        LDI     XH,11
514
T_PSM12:PUSH    XH
515
        LDI     XL,36
516
        RCALL   SCR_SET_CURSOR
517
        LDI     TEMP,$DF
518
        LDH     DATA,TPSM_BTN
519
        SBRC    DATA,0
520
        LDI     TEMP,$AE
521
        LDI     COUNT,3
522
        RCALL   SCR_FILL_ATTR
523
        LDI     TEMP,$DF
524
        LDI     COUNT,1
525
        RCALL   SCR_FILL_ATTR
526
        LDI     TEMP,$DF
527
        LDH     DATA,TPSM_BTN
528
        SBRC    DATA,2
529
        LDI     TEMP,$AE
530
        LDI     COUNT,3
531
        RCALL   SCR_FILL_ATTR
532
        LDI     TEMP,$DF
533
        LDI     COUNT,1
534
        RCALL   SCR_FILL_ATTR
535
        LDI     TEMP,$DF
536
        LDH     DATA,TPSM_BTN
537
        SBRC    DATA,1
538
        LDI     TEMP,$AE
539
        LDI     COUNT,3
540
        RCALL   SCR_FILL_ATTR
541
        POP     XH
542
        INC     XH
543
        CPI     XH,14
544
        BRCS    T_PSM12
277 ddp 545
T_PSM20:
546
        LDS     DATA,NEWFRAME
547
        TST     DATA
548
        BREQ    T_PSM21
549
        STS     NEWFRAME,NULL
261 ddp 550
        LDH     XL,TPSM_X0
551
        LDH     XH,TPSM_X1
552
        ADIW    XL,49
553
        ADIW    XL,49 ; +98
554
        PUSH    XL
555
        MOV     DATA,XH
556
        LDI     TEMP,SCR_MOUSE_TEMP
557
        RCALL   FPGA_REG
558
        POP     DATA
559
        LDI     TEMP,SCR_MOUSE_X
560
        RCALL   FPGA_REG
561
        LDH     XL,TPSM_Y
562
        CLR     XH
411 ddp 563
        ADIW    XL,43
261 ddp 564
        PUSH    XL
565
        MOV     DATA,XH
566
        LDI     TEMP,SCR_MOUSE_TEMP
567
        RCALL   FPGA_REG
568
        POP     DATA
569
        LDI     TEMP,SCR_MOUSE_Y
570
        RCALL   FPGA_REG
277 ddp 571
T_PSM21:
261 ddp 572
        CALL    INKEY
277 ddp 573
        BREQ    T_PSM22
261 ddp 574
        CPI     DATA,KEY_ESC
277 ddp 575
        BRNE    T_PSM22
261 ddp 576
        RJMP    T_PSM_ESCAPE
277 ddp 577
T_PSM22:
261 ddp 578
        LDS     DATA,PS2M_RAW_READY
579
        TST     DATA
580
        BREQ    T_PSM20
581
        STS     PS2M_RAW_READY,NULL
582
        LDS     DATA,PS2M_RAW_CODE
583
        SBRS    DATA,3
584
        RJMP    T_PSM20
585
        STH     TPSM_BYTE1,DATA
586
 
587
        RCALL   PS2M_RECEIVE_BYTE
588
        BREQ    T_PSM20
589
        STH     TPSM_BYTE2,DATA
590
 
591
        RCALL   PS2M_RECEIVE_BYTE
592
        BREQ    T_PSM20
593
        STH     TPSM_BYTE3,DATA
594
 
595
        LDH     TEMP,TPSM_ID
596
        TST     TEMP
597
        BREQ    T_PSM30
598
 
599
        RCALL   PS2M_RECEIVE_BYTE
600
        BREQ    T_PSM20
601
        STH     TPSM_BYTE4,DATA
602
;
603
T_PSM30:
604
        LDH     DATA,TPSM_BYTE1
605
        ANDI    DATA,$07
606
        STH     TPSM_BTN,DATA
607
 
608
        LDH     XL,TPSM_X0
609
        LDH     XH,TPSM_X1
610
        LDH     WL,TPSM_BYTE2
611
        CLR     WH
612
        LDH     TEMP,TPSM_BYTE1
613
        SBRC    TEMP,4
614
        RJMP    T_PSM31
615
        ADD     XL,WL
616
        ADC     XH,NULL
617
        CPI     XL,LOW(318)
618
        CPC     XH,ONE ;HIGH(318)
619
        BRCS    T_PSM32
620
        LDI     XL,LOW(317)
621
        LDI     XH,HIGH(317)
622
        RJMP    T_PSM32
623
T_PSM31:COM     WL
624
        ADIW    WL,1
625
        SUB     XL,WL
626
        SBC     XH,WH
627
        BRCC    T_PSM32
628
        CLR     XL
629
        CLR     XH
630
T_PSM32:STH     TPSM_X0,XL
631
        STH     TPSM_X1,XH
632
 
633
        LDH     XL,TPSM_Y
634
        CLR     XH
635
        LDH     WL,TPSM_BYTE3
636
        CLR     WH
637
        LDH     TEMP,TPSM_BYTE1
638
        SBRS    TEMP,5
639
        RJMP    T_PSM33
640
        COM     WL
641
        ADIW    WL,1
642
        ADD     XL,WL
643
        ADC     XH,WH
644
        TST     XH
645
        BRNE    T_PSM34
646
        CPI     XL,250
647
        BRCS    T_PSM35
648
T_PSM34:LDI     XL,249
649
        RJMP    T_PSM35
650
T_PSM33:SUB     XL,WL
651
        SBC     XH,NULL
652
        BRCC    T_PSM35
653
        CLR     XL
654
T_PSM35:STH     TPSM_Y,XL
655
 
656
        LDH     TEMP,TPSM_ID
657
        TST     TEMP
658
        BREQ    T_PSM40
659
 
660
        LDH     DATA,TPSM_BYTE4
661
        LDH     XL,TPSM_Z
662
        ADD     XL,DATA
663
        ANDI    XL,$0F
664
        STH     TPSM_Z,XL
665
 
666
T_PSM40:
667
        LDIZ    MSG_TPSM_3*2
668
        RCALL   SCR_PRINTSTRZ
669
 
670
        ORI     FLAGS1,0B00000010
671
        LDH     DATA,TPSM_BYTE1
672
        RCALL   HEXBYTE
673
        LDI     DATA,$20
674
        RCALL   PUTCHAR
675
        LDH     DATA,TPSM_BYTE2
676
        RCALL   HEXBYTE
677
        LDI     DATA,$20
678
        RCALL   PUTCHAR
679
        LDH     DATA,TPSM_BYTE3
680
        RCALL   HEXBYTE
681
        LDI     DATA,$20
682
        RCALL   PUTCHAR
683
        LDH     TEMP,TPSM_ID
684
        TST     TEMP
685
        BREQ    T_PSM41
686
        LDH     DATA,TPSM_BYTE4
687
        RCALL   HEXBYTE
688
        LDI     DATA,$20
689
        RCALL   PUTCHAR
690
T_PSM41:LDI     DATA,$20
691
        RCALL   PUTCHAR
692
        ANDI    FLAGS1,0B11111100
693
 
694
        RJMP    T_PSM10
695
;
696
;--------------------------------------
697
;in:    DATA
698
;out:   sreg.Z - CLR == ok; SET == timeout
699
PS2M_SEND_BYTE:
700
        CLR     TEMP
701
PS2M_SEND0:
702
        SBIS    PINE,5   ; clock line
703
        RJMP    PS2M_SEND_BYTE
704
        DEC     TEMP
705
        BRNE    PS2M_SEND0
706
 
707
        CLI
708
        STS     PS2M_DATA,DATA
709
        LDI     TEMP,(1<<PS2M_BIT_TX)
710
        STS     PS2M_FLAGS,TEMP
711
        STS     PS2M_BIT_COUNT,NULL
712
        STS     PS2M_RAW_READY,NULL
713
        PS2M_CLOCKLINE_DOWN
714
        SEI
715
        DELAY_US 130
716
        PS2M_DATALINE_DOWN
717
        DELAY_US 20
718
        LDIZ    PS2M_TIMEOUT
719
        LDIW    15
720
        CALL    SET_TIMEOUT_MS
721
        PS2M_CLOCKLINE_UP
722
PS2M_SEND1:
723
        LDS     TEMP,PS2M_FLAGS
724
        ANDI    TEMP,(1<<PS2M_BIT_ACKBIT)
725
        BRNE    PS2M_SEND2
726
        LDIZ    PS2M_TIMEOUT
727
        CALL    CHECK_TIMEOUT_MS
728
        BRCC    PS2M_SEND1
729
        SEZ
730
PS2M_SEND2:
731
        RET
732
;
733
;--------------------------------------
734
;out:   sreg.Z - CLR == ok; SET == timeout
735
;       DATA == byte
736
PS2M_RECEIVE_BYTE:
737
        STS     PS2M_RAW_READY,NULL
738
        LDIZ    PS2M_TIMEOUT
739
        LDIW    7
740
        CALL    SET_TIMEOUT_MS
741
 
742
PS2M_RXBYTE1:
743
        LDS     TEMP,PS2M_RAW_READY
744
        TST     TEMP
745
        BRNE    PS2M_RXBYTE2
746
        LDIZ    PS2M_TIMEOUT
747
        CALL    CHECK_TIMEOUT_MS
748
        BRCC    PS2M_RXBYTE1
749
        SEZ
750
        RET
751
 
752
PS2M_RXBYTE2:
753
        LDS     DATA,PS2M_RAW_CODE
754
        STS     PS2M_RAW_READY,NULL
755
        RET
756
;
757
;--------------------------------------
758
;