000001 ; 000002 ; Sample Program 1 recursive addition 000003 ; 000004 ; 000005 ; Usage: kiteasm -Ttext 900 -Tconst 9f0 -Tdata 000 testadd 000006 ; 000007 _MAIN: 000008 0000 C100 ld #0x00 ; DECIMAL = 0 000009 0001 1400 st DECIMAL ; 000010 0002 C108 ld #0x08 ; SP = 0x800 000011 0003 BC00 swp ; 000012 0004 9C00 not ; test! 000013 0005 9C00 not ; test! 000014 0006 9500 eor #0x00 ; test! 000015 0007 9100 or #0x00 ; test! 000016 0008 99FF and #0xff ; test! 000017 0009 B000 rol ; test! 000018 000A B400 ror ; test! 000019 000B F004 mv sp, acc ; 000020 000C C800 in ; in 000021 000D D400 push ; SP--;(SP) = ACC 000022 000E 2016 call radd ; call radd 000023 000F D000 pop ; ACC = (SP); SP++ 000024 0010 CC00 out ; out 000025 0011 D400 push ; SP--;(SP) == ACC 000026 0012 2025 call hex2dec ; call hex2dec 000027 0013 D000 pop ; ACC = (SP); SP++ 000028 0014 CC00 out ; out 000029 0015 F800 halt ; halt 000030 ; 000031 0016 F009 radd: mv ixr, sp ; IXR = SP 000032 0017 C201 ld ixr, 1 ; ACC = (IXR+1) 000033 0018 D400 push ; SP--;(SP) == ACC 000034 0019 9100 or #0 ; if ACC == 0 then radd0 000035 001A 5021 jpz radd0 ; 000036 001B 8C00 dec acc, acc ; ACC-- 000037 001C D400 push ; SP--;(SP) == ACC 000038 001D 2016 call radd ; call radd 000039 001E D000 pop ; ACC == (SP) 000040 001F F009 mv ixr, sp ; IXR = SP;SP++ 000041 0020 8200 add ixr, 0 ; ACC = ACC + (IXR) 000042 0021 F009 radd0: mv ixr, sp ; IXR = SP 000043 0022 C602 st ixr, 2 ; (IXR+2) = ACC 000044 0023 8805 inc sp, sp ; SP ++ 000045 0024 E000 ret ; return 000046 ; 000047 0025 C800 hex2dec:in ; in 000048 0026 8809 inc ixr, sp ; IXR = SP + 1 000049 0027 880A inc ixr, ixr ; ACC = (IXR) 000050 0028 C2FF ld ixr, -1 ; 000051 0029 D400 push ; SP--;(SP) == ACC 000052 002A 0700 ld CONST ; ACC = (CONST) 000053 002B F008 mv ixr,acc ; IXR = ACC 000054 002C D000 pop ; ACC == (SP);SP++ 000055 002D 8602 hex0: sub ixr, 2 ; if (acc - 1000 < 0) then hex1 000056 002E 4035 jpc hex1 ; 000057 002F D400 push ; (DECIMAL)++ 000058 0030 0400 ld DECIMAL ; 000059 0031 8800 inc acc ; 000060 0032 1400 st DECIMAL ; 000061 0033 D000 pop ; 000062 0034 302D jp hex0 ; goto hex0 000063 0035 8202 hex1: add ixr, 2 ; ACC = ACC + (IXR+2) 000064 0036 D400 push ; (DECIMAL) >> 4 000065 0037 0400 ld DECIMAL ; 000066 0038 B000 rol ; 000067 0039 B000 rol ; 000068 003A B000 rol ; 000069 003B B000 rol ; 000070 003C 1400 st DECIMAL ; 000071 003D D000 pop 000072 ; 000073 003E 8601 hex2: sub ixr, 1 ; if (acc - 100 < 0) then hex3 000074 003F 4046 jpc hex3 ; 000075 0040 D400 push ; (DECIMAL)++ 000076 0041 0400 ld DECIMAL ; 000077 0042 8101 add #0x01 ; 000078 0043 1400 st DECIMAL ; 000079 0044 D000 pop ; 000080 0045 303E jp hex2 ; goto hex2 000081 0046 8201 hex3: add ixr, 1 ; ACC = ACC + (IXR+1) 000082 0047 D400 push ; (DECIMAL) >> 4 000083 0048 0400 ld DECIMAL ; 000084 0049 A400 asl ; 000085 004A A400 asl ; 000086 004B A400 asl ; 000087 004C A400 asl ; 000088 004D 1400 st DECIMAL ; 000089 004E D000 pop ; 000090 ; 000091 004F 8600 hex4: sub ixr, 0 ; if (acc - 10 < 0) then hex5 000092 0050 4057 jpc hex5 ; 000093 0051 D400 push ; (DECIMAL)++ 000094 0052 0400 ld DECIMAL ; 000095 0053 85FF sub #-1 ; 000096 0054 1400 st DECIMAL ; 000097 0055 D000 pop ; 000098 0056 304F jp hex4 ; goto hex4 000099 0057 8200 hex5: add ixr, 0 ; ACC = ACC + (IXR) 000100 0058 D400 push ; (DECIMAL) >> 4 000101 0059 0400 ld DECIMAL ; 000102 005A A000 lsl ; 000103 005B A000 lsl ; 000104 005C A000 lsl ; 000105 005D A000 lsl ; 000106 005E F009 mv ixr, sp ; 000107 005F 8200 add ixr, 0 ; ACC = ACC + (IXR) 000108 0060 C602 st ixr, 2 ; 000109 0061 8805 inc sp, sp ; SP++ 000110 0062 E000 ret ; return 000111 000112 000113 .const 000114 0700 0701 CONST: .word D10 000115 0701 000A D10: .word 10 000116 0702 0064 D100: .word 100 000117 0703 03E8 D1000: .word 1000 000118 000119 000120 .data 000121 0400 0000 DECIMAL: .word 0 000122 000123 000124 000125 000126
This is my e-mail address: