📄 main.ls
字号:
4521 037f 1e03 ldw x,(OFST+1,sp)
4522 0381 f7 ld (x),a
4523 0382 L1062:
4524 ; 165 width--;
4526 0382 0a09 dec (OFST+7,sp)
4527 ; 166 str++;
4529 0384 1e03 ldw x,(OFST+1,sp)
4530 0386 1c0001 addw x,#1
4531 0389 1f03 ldw (OFST+1,sp),x
4532 038b L3752:
4533 ; 131 while(width)
4535 038b 0d09 tnz (OFST+7,sp)
4536 038d 2703 jreq L26
4537 038f cc02d5 jp L1752
4538 0392 L26:
4539 ; 168 }
4542 0392 5b04 addw sp,#4
4543 0394 81 ret
4636 ; 170 void showLine(const u8 x,const u8 y,u8* lcd_stack,char * str,...)
4636 ; 171 {
4637 switch .text
4638 0395 _showLine:
4640 0395 89 pushw x
4641 0396 5204 subw sp,#4
4642 00000004 OFST: set 4
4645 ; 172 u8 coordinate = 16 * y + x;
4647 0398 9f ld a,xl
4648 0399 97 ld xl,a
4649 039a a610 ld a,#16
4650 039c 42 mul x,a
4651 039d 9f ld a,xl
4652 039e 1b05 add a,(OFST+1,sp)
4653 03a0 6b04 ld (OFST+0,sp),a
4654 ; 175 va_start(marker,str); // Initialize variable arguments.
4656 03a2 96 ldw x,sp
4657 03a3 1c000d addw x,#OFST+9
4658 03a6 1f02 ldw (OFST-2,sp),x
4659 ; 176 for(i=0;i<64;i++)
4661 03a8 0f01 clr (OFST-3,sp)
4662 03aa L1762:
4665 03aa 0c01 inc (OFST-3,sp)
4668 03ac 7b01 ld a,(OFST-3,sp)
4669 03ae a140 cp a,#64
4670 03b0 25f8 jrult L1762
4672 03b2 acc004c0 jpf L1072
4673 03b6 L7762:
4674 ; 182 if(coordinate > 64) break; //防止堆栈溢出
4676 03b6 7b04 ld a,(OFST+0,sp)
4677 03b8 a141 cp a,#65
4678 03ba 2503 jrult L5072
4680 03bc L3072:
4681 ; 217 va_end( marker ); // Reset variable arguments.
4683 ; 218 }
4686 03bc 5b06 addw sp,#6
4687 03be 81 ret
4688 03bf L5072:
4689 ; 184 if(*str == '\\')
4691 03bf 1e0b ldw x,(OFST+7,sp)
4692 03c1 f6 ld a,(x)
4693 03c2 a15c cp a,#92
4694 03c4 261b jrne L7072
4695 ; 186 str++;
4697 03c6 1e0b ldw x,(OFST+7,sp)
4698 03c8 1c0001 addw x,#1
4699 03cb 1f0b ldw (OFST+7,sp),x
4700 ; 187 lcd_stack[coordinate] = *str;
4702 03cd 7b09 ld a,(OFST+5,sp)
4703 03cf 97 ld xl,a
4704 03d0 7b0a ld a,(OFST+6,sp)
4705 03d2 1b04 add a,(OFST+0,sp)
4706 03d4 2401 jrnc L66
4707 03d6 5c incw x
4708 03d7 L66:
4709 03d7 02 rlwa x,a
4710 03d8 160b ldw y,(OFST+7,sp)
4711 03da 90f6 ld a,(y)
4712 03dc f7 ld (x),a
4714 03dd acb704b7 jpf L1172
4715 03e1 L7072:
4716 ; 189 else if(*str == '%')
4718 03e1 1e0b ldw x,(OFST+7,sp)
4719 03e3 f6 ld a,(x)
4720 03e4 a125 cp a,#37
4721 03e6 2703 jreq L001
4722 03e8 cc04a7 jp L3172
4723 03eb L001:
4724 ; 191 str++;
4726 03eb 1e0b ldw x,(OFST+7,sp)
4727 03ed 1c0001 addw x,#1
4728 03f0 1f0b ldw (OFST+7,sp),x
4729 ; 192 if (*str == 'd' || *str == 'D')
4731 03f2 1e0b ldw x,(OFST+7,sp)
4732 03f4 f6 ld a,(x)
4733 03f5 a164 cp a,#100
4734 03f7 2707 jreq L7172
4736 03f9 1e0b ldw x,(OFST+7,sp)
4737 03fb f6 ld a,(x)
4738 03fc a144 cp a,#68
4739 03fe 2637 jrne L5172
4740 0400 L7172:
4741 ; 194 str++;
4743 0400 1e0b ldw x,(OFST+7,sp)
4744 0402 1c0001 addw x,#1
4745 0405 1f0b ldw (OFST+7,sp),x
4746 ; 195 decToAscii(&lcd_stack[coordinate],va_arg(marker,u16),(*str-'0'));
4748 0407 1e0b ldw x,(OFST+7,sp)
4749 0409 f6 ld a,(x)
4750 040a a030 sub a,#48
4751 040c 88 push a
4752 040d 1e03 ldw x,(OFST-1,sp)
4753 040f 1c0002 addw x,#2
4754 0412 1f03 ldw (OFST-1,sp),x
4755 0414 1e03 ldw x,(OFST-1,sp)
4756 0416 5a decw x
4757 0417 5a decw x
4758 0418 fe ldw x,(x)
4759 0419 89 pushw x
4760 041a 7b0c ld a,(OFST+8,sp)
4761 041c 97 ld xl,a
4762 041d 7b0d ld a,(OFST+9,sp)
4763 041f 1b07 add a,(OFST+3,sp)
4764 0421 2401 jrnc L07
4765 0423 5c incw x
4766 0424 L07:
4767 0424 02 rlwa x,a
4768 0425 cd0226 call _decToAscii
4770 0428 5b03 addw sp,#3
4771 ; 196 coordinate += (*str-'0'-1);
4773 042a 1e0b ldw x,(OFST+7,sp)
4774 042c f6 ld a,(x)
4775 042d a031 sub a,#49
4776 042f 1b04 add a,(OFST+0,sp)
4777 0431 6b04 ld (OFST+0,sp),a
4779 0433 acb704b7 jpf L1172
4780 0437 L5172:
4781 ; 198 else if(*str == 'c' || *str == 'C')
4783 0437 1e0b ldw x,(OFST+7,sp)
4784 0439 f6 ld a,(x)
4785 043a a163 cp a,#99
4786 043c 2707 jreq L5272
4788 043e 1e0b ldw x,(OFST+7,sp)
4789 0440 f6 ld a,(x)
4790 0441 a143 cp a,#67
4791 0443 261f jrne L3272
4792 0445 L5272:
4793 ; 200 lcd_stack[coordinate] = va_arg(marker,u16);
4795 0445 7b09 ld a,(OFST+5,sp)
4796 0447 97 ld xl,a
4797 0448 7b0a ld a,(OFST+6,sp)
4798 044a 1b04 add a,(OFST+0,sp)
4799 044c 2401 jrnc L27
4800 044e 5c incw x
4801 044f L27:
4802 044f 02 rlwa x,a
4803 0450 1602 ldw y,(OFST-2,sp)
4804 0452 72a90002 addw y,#2
4805 0456 1702 ldw (OFST-2,sp),y
4806 0458 1602 ldw y,(OFST-2,sp)
4807 045a 905a decw y
4808 045c 905a decw y
4809 045e 90e601 ld a,(1,y)
4810 0461 f7 ld (x),a
4812 0462 2053 jra L1172
4813 0464 L3272:
4814 ; 202 else if(*str == 'x' || *str == 'X')
4816 0464 1e0b ldw x,(OFST+7,sp)
4817 0466 f6 ld a,(x)
4818 0467 a178 cp a,#120
4819 0469 2707 jreq L3372
4821 046b 1e0b ldw x,(OFST+7,sp)
4822 046d f6 ld a,(x)
4823 046e a158 cp a,#88
4824 0470 2645 jrne L1172
4825 0472 L3372:
4826 ; 204 str++;
4828 0472 1e0b ldw x,(OFST+7,sp)
4829 0474 1c0001 addw x,#1
4830 0477 1f0b ldw (OFST+7,sp),x
4831 ; 205 hexToAscii(&lcd_stack[coordinate],va_arg(marker,u16),(*str - '0'));
4833 0479 1e0b ldw x,(OFST+7,sp)
4834 047b f6 ld a,(x)
4835 047c a030 sub a,#48
4836 047e 88 push a
4837 047f 1e03 ldw x,(OFST-1,sp)
4838 0481 1c0002 addw x,#2
4839 0484 1f03 ldw (OFST-1,sp),x
4840 0486 1e03 ldw x,(OFST-1,sp)
4841 0488 5a decw x
4842 0489 5a decw x
4843 048a fe ldw x,(x)
4844 048b 89 pushw x
4845 048c 7b0c ld a,(OFST+8,sp)
4846 048e 97 ld xl,a
4847 048f 7b0d ld a,(OFST+9,sp)
4848 0491 1b07 add a,(OFST+3,sp)
4849 0493 2401 jrnc L47
4850 0495 5c incw x
4851 0496 L47:
4852 0496 02 rlwa x,a
4853 0497 cd02cf call _hexToAscii
4855 049a 5b03 addw sp,#3
4856 ; 206 coordinate += (*str - '0' - 1);
4858 049c 1e0b ldw x,(OFST+7,sp)
4859 049e f6 ld a,(x)
4860 049f a031 sub a,#49
4861 04a1 1b04 add a,(OFST+0,sp)
4862 04a3 6b04 ld (OFST+0,sp),a
4863 04a5 2010 jra L1172
4864 04a7 L3172:
4865 ; 212 lcd_stack[coordinate] = *str;
4867 04a7 7b09 ld a,(OFST+5,sp)
4868 04a9 97 ld xl,a
4869 04aa 7b0a ld a,(OFST+6,sp)
4870 04ac 1b04 add a,(OFST+0,sp)
4871 04ae 2401 jrnc L67
4872 04b0 5c incw x
4873 04b1 L67:
4874 04b1 02 rlwa x,a
4875 04b2 160b ldw y,(OFST+7,sp)
4876 04b4 90f6 ld a,(y)
4877 04b6 f7 ld (x),a
4878 04b7 L1172:
4879 ; 214 str++;
4881 04b7 1e0b ldw x,(OFST+7,sp)
4882 04b9 1c0001 addw x,#1
4883 04bc 1f0b ldw (OFST+7,sp),x
4884 ; 215 coordinate++;
4886 04be 0c04 inc (OFST+0,sp)
4887 04c0 L1072:
4888 ; 180 while(*str != '\0')
4890 04c0 1e0b ldw x,(OFST+7,sp)
4891 04c2 7d tnz (x)
4892 04c3 2703 jreq L201
4893 04c5 cc03b6 jp L7762
4894 04c8 L201:
4895 04c8 acbc03bc jpf L3072
4983 ; 21 main()
4983 ; 22 {
4984 switch .text
4985 04cc _main:
4987 04cc 88 push a
4988 00000001 OFST: set 1
4991 ; 24 u8 tmp = 10;
4993 04cd a60a ld a,#10
4994 04cf 6b01 ld (OFST+0,sp),a
4995 ; 26 hc164Init(); //74HC164初始化
4997 04d1 cd0078 call _hc164Init
4999 ; 27 hc165Init(); //74HC165初始化
5001 04d4 cd00c1 call _hc165Init
5003 ; 28 hc164SetDat(tmp);
5005 04d7 7b01 ld a,(OFST+0,sp)
5006 04d9 cd004c call _hc164SetDat
5008 ; 29 tmp = hc165GetDat();
5010 04dc cd0091 call _hc165GetDat
5012 04df 6b01 ld (OFST+0,sp),a
5013 ; 31 st7920LcdInit(); //LCD初始化
5015 04e1 cd011c call _st7920LcdInit
5017 ; 33 showLine(0,0,lcd_buffer,"74HC164--74HC165");
5019 04e4 ae002f ldw x,#L7772
5020 04e7 89 pushw x
5021 04e8 ae0000 ldw x,#_lcd_buffer
5022 04eb 89 pushw x
5023 04ec 5f clrw x
5024 04ed 4f clr a
5025 04ee 95 ld xh,a
5026 04ef cd0395 call _showLine
5028 04f2 5b04 addw sp,#4
5029 ; 34 showLine(0,1,lcd_buffer,"Serial→Parallel");
5031 04f4 ae001e ldw x,#L1003
5032 04f7 89 pushw x
5033 04f8 ae0000 ldw x,#_lcd_buffer
5034 04fb 89 pushw x
5035 04fc ae0001 ldw x,#1
5036 04ff 4f clr a
5037 0500 95 ld xh,a
5038 0501 cd0395 call _showLine
5040 0504 5b04 addw sp,#4
5041 ; 35 showLine(0,2,lcd_buffer,"Parallel→Serial");
5043 0506 ae000d ldw x,#L3003
5044 0509 89 pushw x
5045 050a ae0000 ldw x,#_lcd_buffer
5046 050d 89 pushw x
5047 050e ae0002 ldw x,#2
5048 0511 4f clr a
5049 0512 95 ld xh,a
5050 0513 cd0395 call _showLine
5052 0516 5b04 addw sp,#4
5053 ; 36 showLine(0,3,lcd_buffer,"Data: ");
5055 0518 ae0006 ldw x,#L5003
5056 051b 89 pushw x
5057 051c ae0000 ldw x,#_lcd_buffer
5058 051f 89 pushw x
5059 0520 ae0003 ldw x,#3
5060 0523 4f clr a
5061 0524 95 ld xh,a
5062 0525 cd0395 call _showLine
5064 0528 5b04 addw sp,#4
5065 ; 37 showLine(5,3,lcd_buffer,"0x%x2",tmp);
5067 052a 7b01 ld a,(OFST+0,sp)
5068 052c 88 push a
5069 052d ae0000 ldw x,#L7003
5070 0530 89 pushw x
5071 0531 ae0000 ldw x,#_lcd_buffer
5072 0534 89 pushw x
5073 0535 ae0003 ldw x,#3
5074 0538 a605 ld a,#5
5075 053a 95 ld xh,a
5076 053b cd0395 call _showLine
5078 053e 5b05 addw sp,#5
5079 ; 38 refreshLCD(lcd_buffer); //刷新LCD*/
5081 0540 ae0000 ldw x,#_lcd_buffer
5082 0543 cd01b6 call _refreshLCD
5084 0546 L1103:
5085 ; 39 while(1);
5087 0546 20fe jra L1103
5100 xdef _main
5101 xdef _SPI_rechar
5102 xdef _SPI_sendchar
5103 xdef _SPI_Init
5104 switch .ubsct
5105 0000 _lcd_buffer:
5106 0000 000000000000 ds.b 64
5107 xdef _lcd_buffer
5108 xdef _showLine
5109 xdef _hexToAscii
5110 xdef _decToAscii
5111 xdef _refreshLCD
5112 xdef _st7920LcdInit
5113 xdef _sendDataST7920
5114 xdef _sendCodeST7920
5115 xdef _hc165Init
5116 xdef _hc165GetDat
5117 xdef _hc164Init
5118 xdef _hc164SetDat
5119 xdef _delay_us
5120 xdef _delay_ms
5121 .const: section .text
5122 0000 L7003:
5123 0000 307825783200 dc.b "0x%x2",0
5124 0006 L5003:
5125 0006 446174613a20 dc.b "Data: ",0
5126 000d L3003:
5127 000d 506172616c6c dc.b "Parallel",161
5128 0016 fa5365726961 dc.b 250,83,101,114,105,97
5129 001c 6c00 dc.b "l",0
5130 001e L1003:
5131 001e 53657269616c dc.b "Serial",161
5132 0025 fa506172616c dc.b 250,80,97,114,97,108
5133 002b 6c656c00 dc.b "lel",0
5134 002f L7772:
5135 002f 373448433136 dc.b "74HC164--74HC165",0
5155 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -