-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathLoRa.asm
700 lines (662 loc) · 11.5 KB
/
LoRa.asm
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
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
10 ORG 400H
11 ; leaving space for RAMDISK.ASM
12 ; used as a debug tool
20 JP MAIN
30REGOUT EQU 0BD03H
40PUTSTR EQU 0BFF1H
50INKEY EQU 0BE53H
60PUTCHR EQU 0BE62H
70WAITK EQU 0BFCDH
80RPTCHR EQU 0BFEEH
90GPF EQU 0BFD0H
100LDPSTR EQU 0BD00H
110MSGNUM: DB 0
120MSGBUF: DB 0,0
130POSY: DB 0
140STARTY: DB 0
150LASTY: DB 0
160ADDR: DB 0,0,0,0
170BUFFER: DEFS 128
180MAIN: CALL PREPSR
190 XOR A
200 LD (POSY),A
210 LD (STARTY),A
220 LD (LASTY),A
230 LD (MSGNUM),A
240 LD DE,8000H
250 LD (MSGBUF),DE
260MNCLS: CALL CLS
270 LD HL,GREET
280 CALL PUTBNR
290 LD HL,MENUM0
300 CALL STRLN
310 LD DE,0200H
320 CALL PUTSTR
330 LD HL,MENUM2
340 CALL STRLN
350 LD DE,0500H
360 CALL PUTSTR
370 LD A,(MSGNUM)
380 CP 0
390 JP Z,MAIN0
400 CALL DRAWMB
410 LD A,(MSGNUM)
420 ADD A,30H ; +48 ('0' ASCII)
430 LD (MENUMB),A
440 LD HL,MENUM1
450 CALL STRLN
460 LD DE,0300H
470 CALL PUTSTR
480MAIN0: IN A,(71H)
490 AND 2
500 JP NZ,RECV
510 CALL INKEY
520 CP 0
530 JP Z,MAIN0
540 CALL MX2KEY
550 CP 'Q' ; quit
560 JP Z,THEEND
570 CP 'P'
580 JP Z,PING
590 CP '/'
600 JP Z,PREFS
610 CP 'M'
620 JP Z,SHMBOX ; DEBUG
630 JP MAIN0
640THEEND: CALL WAITK
650ZEEND: CALL CLS
660 LD HL,ZOIGIN
670 CALL STRLN
680 LD HL,ZOIGIN
690 LD DE,0
700 CALL PUTSTR
710 RET
720RECV: LD DE,0400H
730 LD HL,RCVSTR
740 CALL STRLN
750 CALL PUTSTR
760 LD HL,BUFFER
770RECV0: LD B,128
780 XOR A
790RECV1: LD (HL),A
800 INC HL
810 DJNZ RECV1 ; ZERO BUFFER
820 LD HL,BUFFER
830 LD B,127
840RECV4: IN A,(72H)
850 CP 1AH
860 JP Z,RECV5
870 LD (HL),A
880 INC HL
890RECV2: IN A,(71H)
900 AND 2
910 JP Z,RECV2
920 DJNZ RECV4
930RECV5: XOR A
940 LD (HL),A
950 CALL VBWEHT
960 CALL VBWEHT
970 CALL VBWEHT
980 CALL VBWEHT ; 1 SEC
990 LD DE,0400H
1000 LD HL,DONE
1010 CALL STRLN
1020 CALL PUTSTR
1030 CALL VBWEHT
1040 CALL VBWEHT
1050 CALL VBWEHT
1060 CALL VBWEHT ; 1 SEC
1070 LD HL,BUFFER
1080 LD DE,(MSGBUF)
1090 CALL R2BANK
1100 LD A,(MSGNUM)
1110 INC A
1120 LD (MSGNUM),A ; WILL ROTATE NICELY TO 0
1130 LD HL,(MSGBUF)
1140 PUSH HL
1150 LD A,H
1160 LD HL,DBGS01
1170 CALL BYTE
1180 POP BC
1190 LD A,C
1200 LD HL,DBGS02
1210 CALL BYTE
1220 LD HL,DBGS00
1230 CALL STRLN
1240 LD DE,0400H
1250 CALL PUTSTR
1260 CALL VBWEHT
1270 CALL VBWEHT
1280 CALL VBWEHT
1290 CALL VBWEHT ; 1 SEC
1300 LD HL,(MSGBUF)
1310 LD BC,128
1320 ADD HL,BC
1330 LD A,(MSGNUM)
1340 CP 0
1350 JP NZ,RECV3
1360 LD HL,8000H
1370RECV3: LD (MSGBUF),HL
1380 PUSH HL
1390 LD A,H
1400 LD HL,DBGS04
1410 CALL BYTE
1420 POP BC
1430 LD A,C
1440 LD HL,DBGS05
1450 CALL BYTE
1460 LD HL,DBGS03
1470 CALL STRLN
1480 LD DE,0400H
1490 CALL PUTSTR
1500 CALL VBWEHT
1510 CALL VBWEHT
1520 CALL VBWEHT
1530 CALL VBWEHT ; 1 SEC
1540 JP MNCLS
1550PING: LD HL,BFPING
1560 CALL PUTSR1
1570 LD DE,0400H
1580 LD HL,SPING
1590 CALL STRLN
1600 LD DE,0400H
1610 CALL PUTSTR
1620 CALL VBWEHT
1630 CALL VBWEHT
1640 CALL VBWEHT
1650 CALL VBWEHT
1660 CALL VBWEHT
1670 CALL VBWEHT ; 1.5 SECS
1680 JP MNCLS
1690PREFS: CALL CLS
1700 LD HL,PMENU0
1710 CALL PUTBNR
1720 LD HL,PMENU1
1730 CALL STRLN
1740 LD DE, 0200H
1750 CALL PUTSTR
1760 LD HL,PMENU2
1770 CALL STRLN
1780 LD DE, 0300H
1790 CALL PUTSTR
1800PREFS0: CALL WAITK
1810 CP 0
1820 JP Z,MAIN0
1830 CALL MX2KEY
1840 CP 'Q' ; quit
1850 JP Z,THEEND
1860 CP 'B' ; back
1870 JP Z,MNCLS
1880 CP 'S'
1890 JP Z,SETSF
1900 CP 'W'
1910 JP Z,SETBW
1920 JP PREFS0
1930SETSF: CALL CLS
1940 LD HL,SFMNU0
1950 CALL PUTBNR
1960 LD HL,SFMNU1
1970 CALL STRLN
1980 LD DE, 0100H
1990 CALL PUTSTR
2000 LD HL,SFMNU2
2010 CALL STRLN
2020 LD DE, 0200H
2030 CALL PUTSTR
2040 LD HL,SFMNU3
2050 CALL STRLN
2060 LD DE, 0300H
2070 CALL PUTSTR
2080 LD HL,SFMNU4
2090 CALL STRLN
2100 LD DE, 0500H
2110 CALL PUTSTR
2120SETSF0: CALL WAITK
2130 CP 0
2140 JP Z,MAIN0
2150 CALL MX2KEY
2160 CP 'Q' ; quit
2170 JP Z,THEEND
2180 CP 'B' ; back
2190 JP Z,PREFS
2200 CP '0'
2210 JP M,SETSF0
2220 CP '3'
2230 JP M,SETSF1
2240 CP '7'
2250 JP M,SETSF0
2260 CP ':'
2270 JP M,SETSF2
2280 JP SETSF0
2290SETSF1: LD HL,BUFFER
2300 PUSH AF
2310 LD A,'S'
2320 LD (HL),A
2330 INC HL
2340 LD A,'1'
2350 LD (HL),A
2360 INC HL
2370 POP AF
2380 LD (HL),A
2390 LD (SFVAL),A
2400SETSF3: INC HL
2410 XOR A
2420 LD (HL),A
2430 LD HL,BUFFER
2440 CALL PUTSR1
2450 JP PREFS
2460SETSF2: LD (SFVAL),A
2470 LD HL,BUFFER
2480 PUSH AF
2490 LD A,'S'
2500 LD (HL),A
2510 INC HL
2520 POP AF
2530 LD (HL),A
2540 INC HL
2550 JP SETSF3
2560SETBW: CALL CLS
2570 LD HL,BWMNU0
2580 CALL PUTBNR
2590 LD HL,BWMNU1
2600 CALL STRLN
2610 LD DE, 0100H
2620 CALL PUTSTR
2630 LD HL,BWMNU2
2640 CALL STRLN
2650 LD DE, 0200H
2660 CALL PUTSTR
2670 LD HL,BWMNU3
2680 CALL STRLN
2690 LD DE, 0300H
2700 CALL PUTSTR
2710 LD HL,BWMNU4
2720 CALL STRLN
2730 LD DE, 0500H
2740 CALL PUTSTR
2750SETBW0: CALL WAITK
2760 CP 0
2770 JP Z,MAIN0
2780 CALL MX2KEY
2790 CP 'Q' ; quit
2800 JP Z,THEEND
2810 CP 'B' ; back
2820 JP Z,PREFS
2830 CP '0'
2840 JP M,SETBW0
2850 CP ':'
2860 JP M,SETBW1
2870SETBW1: LD HL,BUFFER
2880 PUSH AF
2890 LD A,'B'
2900 LD (HL),A
2910 INC HL
2920 POP AF
2930 LD (HL),A
2940 LD (BWVAL),A
2950 INC HL
2960 XOR A
2970 LD (HL),A
2980 LD HL,BUFFER
2990 CALL PUTSR1
3000 JP PREFS
3010SHMBOX: CALL CLS
3020 LD HL,MNMBX0
3030 CALL PUTBNR
3040SHMBX1: CALL DSPMSG
3050SHMBX0: CALL WAITK
3060 CP 0
3070 JP Z,SHMBX0
3080 CP 3AH ; BS
3090 JP Z,MNCLS
3100 CP 1FH ; DOWN KEY
3110 JP Z,MBDOWN
3120 CP 20H ; UP KEY
3130 JP Z,MBUP
3140 CP 28H ; RETURN KEY
3150 JP Z,MBRETN
3160 CALL MX2KEY
3170 CP 'Q' ; quit
3180 JP Z,ZEEND
3190 CP 'J' ; DOWN KEY
3200 JP Z,MBDOWN
3210 CP 'K' ; UP KEY
3220 JP Z,MBUP
3230 CP 'B' ; back
3240 JP Z,MNCLS
3250 JP SHMBX0
3260DSPMSG: LD DE,0101H
3270 LD HL,8000H
3280 LD A,(MSGNUM)
3290 CP 4
3300 JP M,DSPMS6
3310 LD A,4
3320DSPMS6: LD B,A
3330DSPMS0: PUSH BC
3340 PUSH HL
3350 PUSH DE
3360 LD DE,BUFFER
3370 CALL BANK2R
3460 LD HL,BUFFER
3470 LD B,22
3480 POP DE
3490 PUSH DE ; COORDS
3500 CALL PUTSTR
3510DSPMS4: POP DE
3520 POP HL
3530 LD BC,128
3540 ADD HL,BC
3550 LD A,D
3560 INC A
3570 LD D,A ; INC Y AXIS
3580DSPMS3: POP BC
3590 DJNZ DSPMS0
3600 LD A,(POSY)
3610 INC A ; D STARTS ON LINE 1, NOT 0
3620 LD D,A
3630 LD E,1
3640 PUSH DE
3650 LD HL,BUFFER
3660 XOR A
3670 LD (HL),A
3680 INC HL
3690 LD B,131
3700 CALL LDPSTR
3710 LD HL,BUFFER
3720 LD B,132
3730DSPMS5: LD A,(HL)
3740 XOR 0FFH
3750 LD (HL),A
3760 INC HL
3770 DJNZ DSPMS5
3780 LD HL,BUFFER
3790 LD B,132
3800 POP DE
3810 CALL GPF
3820 RET
3830MBDOWN: CALL MBDWN2
3840 JP SHMBX1
3850MBDWN2: LD A,(POSY)
3860 INC A
3870 LD (POSY),A
3880 LD B,A
3890 LD A,(MSGNUM)
3900 CP B
3910 JP P,MBDWN0
3920 CP 4
3930 JP P,MBDWN0
3940 XOR A
3950 LD (POSY),A
3960MBDWN0: LD B,A
3970 LD A,(MSGNUM)
3980 CP B
3990 JP M,MBDWN1
4000 RET
4010MBDWN1: XOR A
4020 LD (POSY),A
4030 RET
4040MBUP: CALL MBUP2
4050 JP SHMBX1
4060MBUP2: LD A,(POSY)
4070 CP 0
4080 JP NZ,MBUP0
4090 LD A,3
4100 JP MBUP1
4110MBUP0: DEC A
4120MBUP1: LD (POSY),A
4130 RET
4140MBRETN: CALL CLS
4150 LD HL,8000H
4160 LD A,(POSY)
4170 LD B,A
4180 LD A,(STARTY)
4190 ADD A,B
4200 CP 0
4210 JP Z,RTN03
4220 LD B,A
4230 LD DE,128
4240RTN04: ADD HL,DE
4250 DJNZ RTN04 ; OFFSET
4260RTN03: LD DE,BUFFER
4270 LD (ADDR),HL
4280 CALL BANK2R
4290 LD HL,BUFFER
4300 LD DE,0
4310 CALL STRLN
4320 CALL PUTSTR
4330RTN00: CALL WAITK
4340 CP 0
4350 JP Z,RTN00
4360 CP 3AH ; BS
4370 JP Z,SHMBOX
4380 CP 28H ; RETURN KEY
4390 JP Z,SHMBOX
4400 CP 1FH ; DOWN KEY
4410 JP Z,RTN01
4420 CP 20H ; UP KEY
4430 JP Z,RTN02
4440 CALL MX2KEY
4450 CP 'Q' ; quit
4460 JP Z,THEEND
4470 CP ' '
4480 JP Z,SHMBOX
4490 CP 'B' ; back
4500 JP Z,SHMBOX
4510 CP 'J' ; DOWN KEY
4520 JP Z,RTN01
4530 CP 'K' ; UP KEY
4540 JP Z,RTN02
4550 JP RTN00
4560RTN01: CALL MBDWN2
4570 JP MBRETN
4580RTN02: CALL MBUP2
4590 JP MBRETN
4600VBWEHT: LD B,250
4610BWEHT: PUSH BC
4620 CALL WEHT ; ~1 millisec
4630 POP BC
4640 DJNZ BWEHT
4650 RET
4660WEHT: LD B,241
4670WEHT0: NOP
4680 NOP
4690 NOP
4700 NOP
4710 NOP
4720 DJNZ WEHT0
4730 RET
4740PUTSR1: LD A,(HL)
4750 INC HL
4760 CP 0
4770 JP Z, PUTSR2
4780 OUT (72H),A
4790 CALL WEHT
4800 JP PUTSR1
4810PUTSR2: LD A,13
4820 OUT (72H),A
4830 LD A,10
4840 OUT (72H),A
4850 RET
4860PUTBNR: CALL STRLN
4870 LD A,24
4880 SUB B
4890 RRCA
4900 LD D,00H
4910 LD E,A
4920 CALL PUTSTR
4930 RET
4940NM2DEC: LD BC,-10000
4950 CALL NMDC1
4960 LD BC,-1000
4970 CALL NMDC1
4980 LD BC,-100
4990 CALL NMDC1
5000 LD C,-10
5010 CALL NMDC1
5020 LD C,B
5030NMDC1: LD A,-1
5040NMDC2: INC A
5050 ADD HL,BC
5060 JR C,NMDC2
5070 SBC HL,BC
5080 ADD A,48
5090 LD (DE),A
5100 INC DE
5110 RET
5120CLS: LD B,144
5130 LD DE,0
5140CLS0: LD A,32
5150 CALL RPTCHR
5160 RET
5170CLLN: LD B,24
5180 LD E,0
5190 JP CLS0
5200BYTE: PUSH AF
5210 AND 0F0H
5220 RRCA
5230 RRCA
5240 RRCA
5250 RRCA
5260 CALL NIBBLE
5270 INC HL
5280 POP AF
5290 AND 15
5300 CALL NIBBLE
5310 INC HL
5320 RET
5330NIBBLE: SUB 10
5340 JP M,ZERO9
5350 ADD A,7
5360ZERO9: ADD A,58
5370 LD (HL),A
5380 RET
5390STRLN: LD B,0
5400 PUSH HL ; preserve HL
5410STRLN0: LD A,(HL)
5420 CP 0
5430 JP Z,STRLN1
5440 INC HL
5450 INC B
5460 JP STRLN0
5470STRLN1: POP HL ; restore HL
5480 RET
5490MX2KEY: LD B,0
5500 LD C,A ; A IS KEY INDEX
5510 LD HL,MATRIX
5520 ADD HL,BC
5530 LD A,(HL)
5540 RET
5550PREPSR: LD A,2
5560 OUT (60H),A
5570 DEC A ; A=1
5580 OUT (74H),A
5590 XOR A ; A=0
5600 OUT (73H),A
5610 INC A ; A=1
5620 OUT (73H),A
5630 XOR A ; A=0
5640 OUT (73H),A
5650 LD A,0DH
5660 OUT (70H),A
5670 LD A,4EH
5680 OUT (71H),A
5690 LD A,10H
5700 OUT (71H),A
5710 XOR A ; A=0
5720 OUT (63H),A
5730 LD A,05H
5740 OUT (71H),A
5750 LD A,14H
5760 OUT (63H),A
5770 RET
6000GREET: DB '- LoRa Messenger -',0
6010MENUM0: DB '[p]ing [/]prefs [q]uit',0
6020MENUM1: DB '[m]box {'
6030MENUMB: DB 0,' msg}',0
6040MENUM2: DB 'SELECT MENU',0
6050ZOIGIN: DB 'Bye...',13,10,0
6060MATRIX: DB 0,0FFH
6070 DB 'QWERTYUASDFGHJKZXCVBNM,'
6080 DB 0FFH,0FFH,0FFH,0FFH,9,32,10,11,14,15 ; LEFT RIGHT UP DOWN
6090 DB 0FFH,'0.=+',13,'L;',0FFH,'123-'
6100 DB 0FFH,'IO',0FFH,'456*',0FFH,'P',8,0FFH,'789/)'
6110 DB 0FFH,0FFH,0FFH,0FFH,'(',0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
6120 DB 0,12,0FFH
6130ROWNUM: DB 0
6140RCVSTR: DB 'Receiving...',0
6150DONE: DB 'Received msg...',0
6160BFPING: DB 'p',0
6170SPING: DB 'PING sent...',0
6180PMENU0: DB '- Preferences -',0
6190PMENU1: DB '[S]F B[W] [C]R',0
6200PMENU2: DB '[B]ack [Q]uit',0
6210BWMNU0: DB '- BW Prefs -',0
6220BWMNU1: DB '[0] [1] [2] [3] [4]',0
6230BWMNU2: DB '[5] [6] [7] [8] [9]',0
6240BWMNU3: DB ' [B]ack [Q]uit',0
6250BWMNU4: DB 'Current BW: '
6260BWVAL: DB '0',0
6270SFMNU0: DB '- SF Prefs -',0
6280SFMNU1: DB ' [7] [8] [9]',0
6290SFMNU2: DB '1[0] 1[1] 1[2]',0
6300SFMNU3: DB ' [B]ack [Q]uit',0
6310SFMNU4: DB 'Current SF: '
6320SFVAL: DB '0',0
6330MNMBX0: DB '- Msg Box -',0
6340DRAWMB: LD HL, MB0
6350 LD B, 12
6360 LD DE, 0016H
6370 CALL GPF
6380 LD HL, MB1
6390 LD B, 12
6400 LD DE,0116H
6410 CALL GPF
6420 RET
6430MB0: DB 003H, 0F3H, 063H, 00BH, 09BH, 03BH
6440 DB 03BH, 09BH, 00BH, 063H, 0F3H, 003H
6450MB1: DB 00CH, 00CH, 00CH, 00DH, 00DH, 00DH
6460 DB 00DH, 00DH, 00DH, 00CH, 00CH, 00CH
6470DBGS00: DB 'RECEIVED @ 0x'
6480DBGS01: DB 0,0
6490DBGS02: DB 0,0,0
6500DBGS03: DB 'Next address: 0x'
6510DBGS04: DB 0,0
6520DBGS05: DB 0,0,0
6530RAMON: ; DI
6540 IN A,(17H)
6550 LD (V19A),A
6560 LD A,0
6570 OUT (17H),A ; disable periph. interrupts
6580 IN A, (19H)
6590 LD (V19B),A
6600 LD B, 50H ; /CEROM2=L, BANK1=0, BANK0=1
6610 OR B
6620 OUT (19H),A ; enable ext. ram to 0x8000-0xC0000
6630 RET
6640RAMOFF: LD A,(V19B)
6650 OUT (19H),A
6660 LD A,(V19A)
6670 OUT (17H),A ; re-enable ROM
6680 ; EI
6690 RET
6700V19A: DB 0
6710V19B: DB 0
6720BANK2R: LD B,32
6730 CALL RAMON
6740LOOP00: LD A,(HL) ; HL=EXT-RAM ADDR
6750 LD (DE),A ; DE=BUFFER
6760 INC HL
6770 INC DE
6780 DJNZ LOOP00
6790 CALL RAMOFF
6800 RET
6810R2BANK: LD B,32
6820 CALL RAMON
6830LOOP01: LD A,(HL) ; HL=BUFFER
6840 LD (DE),A ; DE=EXT-RAM ADDR
6850 INC HL
6860 INC DE
6870 DJNZ LOOP01
6880 CALL RAMOFF
6890 RET