This commit is contained in:
Michaelangel007 2016-02-20 13:08:00 -08:00
parent 483e863def
commit fbbe4e55d6
1 changed files with 191 additions and 179 deletions

370
printm.s
View File

@ -5,7 +5,7 @@
.feature leading_dot_in_identifiers
.PC02 ; 65C02
/* Version 29
/* Version 30
printm - a modular micro printf replacement for 65C02
Michael Pohoreski
Copyleft {c} Feb, 2016
@ -99,16 +99,16 @@ don't need "every" feature. Seriously, when was the last time
you _needed_ octal? :-)
printm() has manually been optimized for size. In gcc parlance, `-Os`.
With everything enabled printm() takes up $1DC = 476 bytes
With everything enabled printm() takes up $1DB = 475 bytes
(Plus 2 bytes in zero page.)
Whoa! I thought you said this was micro!?
With all 15 features turned OFF the core routines use $62 = 98 bytes.
With the common setting (default):
With the common setting (default) features:
BinAsc, Dec2, Dec3, Dec5, Hex2, Hex4, and StrA
the size is $15E = 350 bytes
the size is $13E = 318 bytes
To toggle features on / off change USE_* to 0 or 1:
@ -123,183 +123,183 @@ To toggle features on / off change USE_* to 0 or 1:
;
; Feature Size Bytes Total Notes
USE_BIN_ASC = 1 ; $7E 126 \. $85 (134 bytes)
USE_BIN_INV = 1 ; $80 128 /
USE_BIN_INV = 0 ; $7E 126 /
USE_DEC_2 = 1 ; $C7 199 \
USE_DEC_3 = 1 ; $C9 201 \.$F2 (242 bytes)
USE_DEC_5 = 1 ; $C9 201 /
USE_DEC_BYTE = 1 ; $DF 223 / sets ENABLE_DEC
USE_HEX_2 = 1 ; $A0 160 \. $A7 (167 bytes)
USE_HEX_4 = 1 ; $A2 162 /
USE_OCT_3 = 1 ; $97 151 \. $9E (158 bytes)
USE_OCT_6 = 1 ; $99 153 /
USE_PTR_2 = 1 ; $B1 177 \. $B8 (184 bytes) sets ENABLE_HEX
USE_PTR_4 = 1 ; $B3 179 /
USE_DEC_3 = 1 ; $C7 199 \.$F0 (240 bytes)
USE_DEC_5 = 1 ; $C7 199 /
USE_DEC_BYTE = 0 ; $DF 223 / sets ENABLE_DEC
USE_HEX_2 = 1 ; $A0 160 \. $A6 (166 bytes)
USE_HEX_4 = 1 ; $A0 160 /
USE_OCT_3 = 0 ; $97 151 \. $9D (157 bytes)
USE_OCT_6 = 0 ; $97 151 /
USE_PTR_2 = 0 ; $B1 177 \. $B7 (183 bytes) sets ENABLE_HEX
USE_PTR_4 = 0 ; $B1 177 /
USE_STR_A = 1 ; $78 120 \
USE_STR_C = 1 ; $78 120 > $A6 (166 bytes)
USE_STR_PASCAL = 1 ; $7A 122 /
USE_STR_C = 0 ; $78 120 > $A6 (166 bytes)
USE_STR_PASCAL = 0 ; $7A 122 /
/*
Demo + Library text dump:
4000:20 58 FC A9 D5 8D 00 20
4008:A9 AA 8D 01 20 AD D2 41
4010:A2 00 A0 00 20 11 F4 18
4018:A5 26 6D D0 41 85 26 AA
4020:A4 27 8E D4 41 8C D5 41
4028:8E D6 41 8C D7 41 AD 00
4030:20 A0 00 91 26 8D D8 41
4038:9C D9 41 8D F4 41 8D F8
4040:41 20 9D 41 8D DA 41 9C
4048:DB 41 A0 00 20 AD 41 A2
4050:CE A0 41 20 0C 43 A0 01
4058:20 AD 41 A2 F2 A0 41 20
4060:0C 43 A0 02 20 AD 41 A2
4068:F6 A0 41 20 0C 43 A0 03
4070:20 AD 41 A2 21 A0 42 20
4078:0C 43 A0 04 20 AD 41 A2
4080:25 A0 42 20 0C 43 A0 05
4088:20 AD 41 A2 29 A0 42 20
4090:0C 43 A0 06 20 AD 41 A2
4098:2D A0 42 20 0C 43 A0 07
40A0:20 AD 41 A2 5D A0 42 20
40A8:0C 43 A0 08 20 AD 41 A2
40B0:61 A0 42 20 0C 43 A0 09
40B8:20 AD 41 A2 65 A0 42 20
40C0:0C 43 A0 0A 20 AD 41 A2
40C8:6B A0 42 20 0C 43 A0 0B
40D0:20 AD 41 A2 81 A0 42 20
40D8:0C 43 A0 0C 20 AD 41 A2
40E0:85 A0 42 20 0C 43 A0 0D
40E8:20 AD 41 A2 D5 A0 42 20
40F0:0C 43 A0 0E 20 AD 41 A2
40F8:CF A0 42 20 0C 43 A0 0F
4100:20 AD 41 A2 D9 A0 42 20
4108:0C 43 A9 11 20 5B FB A2
4110:DD A0 42 20 8C 41 AD 0B
4118:43 85 FF 20 DA FD AD 0A
4120:43 85 FE 20 DA FD 20 A8
4128:41 20 49 41 A2 EF A0 42
4130:20 8C 41 AE 9E 43 86 FE
4138:64 FF 8A 20 DA FD 20 A8
4140:41 20 49 41 A9 8D 4C ED
4148:FD 9C B8 44 9C B9 44 9C
4150:BA 44 A2 10 F8 06 FE 26
4158:FF A0 FD B9 BB 43 79 BB
4160:43 99 BB 43 C8 D0 F4 CA
4168:D0 EB D8 A2 05 88 B9 BB
4170:43 4A 4A 4A 4A 18 69 B0
4178:20 ED FD CA B9 BB 43 29
4180:0F 18 69 B0 20 ED FD 88
4188:CA 10 E3 60 86 FC 84 FD
4190:A0 00 B1 FC F0 06 20 ED
4198:FD C8 D0 F6 60 A2 08 85
41A0:FE 06 FE 6A CA D0 FA 60
41A8:A9 A0 4C ED FD 98 20 C1
41B0:FB A6 28 A4 29 8E 9B 44
41B8:8C 9C 44 60 D8 BD 23 A0
41C0:D9 BD 64 A0 A4 BD 78 BA
41C8:40 A0 25 FE 3F 00 BC 41
41D0:27 00 BF 00 DE C0 DE C0
41D8:1A DA 1A DA C2 E9 EE A0
41E0:C1 D3 C3 BA A0 25 00 C2
41E8:E9 EE A0 C9 CE D6 BA A0
41F0:3F 00 DC 41 1A DA E7 41
41F8:1A DA C4 E5 E3 B2 BA A0
4200:23 00 C4 E5 E3 B3 BA A0
4208:64 00 C4 E5 E3 B5 BA A0
4210:75 00 C2 F9 F4 E5 BD 62
4218:A0 62 A0 62 A0 62 A0 62
4220:00 FA 41 63 00 02 42 E7
4228:03 0A 42 69 FF 12 42 80
4230:00 FF 00 00 00 01 00 7F
4238:00 C8 E5 F8 B2 BA A0 24
4240:00 C8 E5 F8 B4 BA A0 78
4248:00 D0 F4 F2 B2 BA A0 78
4250:BA 40 00 D0 F4 F2 B4 BA
4258:A0 78 BA 26 00 39 42 34
4260:12 41 42 34 12 49 42 00
4268:20 00 20 53 42 00 20 00
4270:20 CF E3 F4 B3 BA A0 6F
4278:00 CF E3 F4 B6 BA A0 4F
4280:00 71 42 B6 01 79 42 DF
4288:32 C8 C5 CC CC CF 00 D7
4290:CF D2 CC C4 00 C8 CF CD
4298:45 0D D0 E1 F3 E3 E1 EC
42A0:A0 CC E5 EE A0 B1 B3 C3
42A8:A0 A0 A0 A0 A0 BA A0 A7
42B0:73 A7 AC A7 73 A7 00 C1
42B8:F0 F0 EC E5 A0 BA A0 A7
42C0:61 A7 00 D0 E1 F3 E3 E1
42C8:EC BA A0 A7 70 A7 00 A7
42D0:42 89 42 8F 42 B7 42 95
42D8:42 C3 42 99 42 F0 F2 E9
42E0:EE F4 ED A8 A9 AE F3 E9
42E8:FA E5 A0 BD A0 A4 00 A0
42F0:E2 F9 F4 E5 F3 8D A0 A0
42F8:A0 A0 AE E6 E5 E1 F4 F5
4300:F2 E5 F3 A0 BD A0 A4 A0
4308:A0 00 E1 01 8E A8 44 8C
4310:A9 44 9C A6 44 20 A1 44
4318:8E 97 43 8C 98 43 80 76
4320:A9 04 D0 02 A9 02 8D 51
4328:43 20 A1 44 8E BE 44 8C
4330:BF 44 A2 00 AD BE 44 29
4338:0F C9 0A 90 02 69 06 69
4340:B0 9D B8 44 A0 04 4E BF
4348:44 6E BE 44 88 D0 F7 E8
4350:E0 04 D0 E0 CA 30 37 BD
4358:B8 44 20 9A 44 80 F5 A9
4360:04 D0 02 A9 02 8D 51 43
4368:20 A1 44 A0 00 B1 FE AA
4370:C8 B1 FE A8 80 B6 20 A1
4378:44 A0 00 B1 FE 10 0A 20
4380:9A 44 C8 D0 F6 E6 FF 80
4388:F2 09 80 20 9A 44 EE 97
4390:43 D0 03 EE 98 43 AD DE
4398:C0 F0 12 30 EE A2 0F CA
43A0:30 EC DD C0 44 D0 F8 8A
43A8:0A AA 7C CF 44 60 A9 05
43B0:D0 06 A9 03 D0 02 A9 02
43B8:8D 09 44 20 A1 44 8E BE
43C0:44 8C BF 44 9C B8 44 9C
43C8:B9 44 9C BA 44 A2 10 F8
43D0:0E BE 44 2E BF 44 A0 FD
43D8:B9 BB 43 79 BB 43 99 BB
4000:20 58 FC A9 20 85 E6 A9
4008:D5 8D 00 20 A9 AA 8D 01
4010:20 AD D6 41 A2 00 A0 00
4018:20 11 F4 18 A5 26 6D D4
4020:41 85 26 AA A4 27 8E D8
4028:41 8C D9 41 8E DA 41 8C
4030:DB 41 AD 00 20 A0 00 91
4038:26 8D DC 41 9C DD 41 8D
4040:F8 41 8D FC 41 20 A1 41
4048:8D DE 41 9C DF 41 A0 00
4050:20 B1 41 A2 D2 A0 41 20
4058:10 43 A0 01 20 B1 41 A2
4060:F6 A0 41 20 10 43 A0 02
4068:20 B1 41 A2 FA A0 41 20
4070:10 43 A0 03 20 B1 41 A2
4078:25 A0 42 20 10 43 A0 04
4080:20 B1 41 A2 29 A0 42 20
4088:10 43 A0 05 20 B1 41 A2
4090:2D A0 42 20 10 43 A0 06
4098:20 B1 41 A2 31 A0 42 20
40A0:10 43 A0 07 20 B1 41 A2
40A8:61 A0 42 20 10 43 A0 08
40B0:20 B1 41 A2 65 A0 42 20
40B8:10 43 A0 09 20 B1 41 A2
40C0:69 A0 42 20 10 43 A0 0A
40C8:20 B1 41 A2 6F A0 42 20
40D0:10 43 A0 0B 20 B1 41 A2
40D8:85 A0 42 20 10 43 A0 0C
40E0:20 B1 41 A2 89 A0 42 20
40E8:10 43 A0 0D 20 B1 41 A2
40F0:D9 A0 42 20 10 43 A0 0E
40F8:20 B1 41 A2 D3 A0 42 20
4100:10 43 A0 0F 20 B1 41 A2
4108:DD A0 42 20 10 43 A9 11
4110:20 5B FB A2 E1 A0 42 20
4118:90 41 AD 0F 43 85 FF 20
4120:DA FD AD 0E 43 85 FE 20
4128:DA FD 20 AC 41 20 4D 41
4130:A2 F3 A0 42 20 90 41 AE
4138:A0 43 86 FE 64 FF 8A 20
4140:DA FD 20 AC 41 20 4D 41
4148:A9 8D 4C ED FD 9C B6 44
4150:9C B7 44 9C B8 44 A2 10
4158:F8 06 FE 26 FF A0 FD B9
4160:B9 43 79 B9 43 99 B9 43
4168:C8 D0 F4 CA D0 EB D8 A2
4170:05 88 B9 B9 43 4A 4A 4A
4178:4A 18 69 B0 20 ED FD CA
4180:B9 B9 43 29 0F 18 69 B0
4188:20 ED FD 88 CA 10 E3 60
4190:86 FC 84 FD A0 00 B1 FC
4198:F0 06 20 ED FD C8 D0 F6
41A0:60 A2 08 85 FE 06 FE 6A
41A8:CA D0 FA 60 A9 A0 4C ED
41B0:FD 98 20 C1 FB A6 28 A4
41B8:29 8E 99 44 8C 9A 44 60
41C0:D8 BD 23 A0 D9 BD 64 A0
41C8:A4 BD 78 BA 40 A0 25 FE
41D0:3F 00 C0 41 27 00 BF 00
41D8:DE C0 DE C0 1A DA 1A DA
41E0:C2 E9 EE A0 C1 D3 C3 BA
41E8:A0 25 00 C2 E9 EE A0 C9
41F0:CE D6 BA A0 3F 00 E0 41
41F8:1A DA EB 41 1A DA C4 E5
4200:E3 B2 BA A0 23 00 C4 E5
4208:E3 B3 BA A0 64 00 C4 E5
4210:E3 B5 BA A0 75 00 C2 F9
4218:F4 E5 BD 62 A0 62 A0 62
4220:A0 62 A0 62 00 FE 41 63
4228:00 06 42 E7 03 0E 42 69
4230:FF 16 42 80 00 FF 00 00
4238:00 01 00 7F 00 C8 E5 F8
4240:B2 BA A0 24 00 C8 E5 F8
4248:B4 BA A0 78 00 D0 F4 F2
4250:B2 BA A0 78 BA 40 00 D0
4258:F4 F2 B4 BA A0 78 BA 26
4260:00 3D 42 34 12 45 42 34
4268:12 4D 42 00 20 00 20 57
4270:42 00 20 00 20 CF E3 F4
4278:B3 BA A0 6F 00 CF E3 F4
4280:B6 BA A0 4F 00 75 42 B6
4288:01 7D 42 DF 32 C8 C5 CC
4290:CC CF 00 D7 CF D2 CC C4
4298:00 C8 CF CD 45 0D D0 E1
42A0:F3 E3 E1 EC A0 CC E5 EE
42A8:A0 B1 B3 C3 A0 A0 A0 A0
42B0:A0 BA A0 A7 73 A7 AC A7
42B8:73 A7 00 C1 F0 F0 EC E5
42C0:A0 BA A0 A7 61 A7 00 D0
42C8:E1 F3 E3 E1 EC BA A0 A7
42D0:70 A7 00 AB 42 8D 42 93
42D8:42 BB 42 99 42 C7 42 9D
42E0:42 F0 F2 E9 EE F4 ED A8
42E8:A9 AE F3 E9 FA E5 A0 BD
42F0:A0 A4 00 A0 E2 F9 F4 E5
42F8:F3 8D A0 A0 A0 A0 AE E6
4300:E5 E1 F4 F5 F2 E5 F3 A0
4308:BD A0 A4 A0 A0 00 DB 01
4310:8E A6 44 8C A7 44 9C A4
4318:44 20 9F 44 8E 99 43 8C
4320:9A 43 80 74 A9 04 2C A9
4328:02 8D 54 43 20 9F 44 8E
4330:BC 44 8C BD 44 A2 00 AD
4338:BC 44 29 0F C9 0A 90 02
4340:69 06 69 B0 9D B6 44 A0
4348:04 4E BD 44 6E BC 44 88
4350:D0 F7 E8 E0 04 D0 E0 CA
4358:30 36 BD B6 44 20 98 44
4360:80 F5 A9 04 2C A9 02 8D
4368:54 43 20 9F 44 A0 00 B1
4370:FE AA C8 B1 FE A8 80 B7
4378:20 9F 44 A0 00 B1 FE 10
4380:0A 20 98 44 C8 D0 F6 E6
4388:FF 80 F2 09 80 20 98 44
4390:EE 99 43 D0 03 EE 9A 43
4398:AD DE C0 F0 12 30 EE A2
43A0:0F CA 30 EC DD BE 44 D0
43A8:F8 8A 0A AA 7C CD 44 60
43B0:A9 05 2C A9 03 2C A9 02
43B8:8D 09 44 20 9F 44 8E BC
43C0:44 8C BD 44 9C B6 44 9C
43C8:B7 44 9C B8 44 A2 10 F8
43D0:0E BC 44 2E BD 44 A0 FD
43D8:B9 B9 43 79 B9 43 99 B9
43E0:43 C8 D0 F4 CA D0 E9 D8
43E8:A2 05 88 B9 BB 43 4A 4A
43F0:4A 4A 18 69 B0 9D B8 44
43F8:CA B9 BB 43 29 0F 18 69
4400:B0 9D B8 44 88 CA 10 E3
4408:A2 00 4C 54 43 A9 31 D0
4410:02 A9 B1 8D 23 44 20 A1
4418:44 A0 08 8A 0A AA A9 B0
4420:90 02 A9 B1 20 9A 44 88
4428:D0 F1 4C 8E 43 20 A1 44
4430:8A 10 0A A9 AD 20 9A 44
4438:8A 49 FF AA E8 A0 00 A9
4440:03 8D 09 44 4C BE 43 A9
4448:06 D0 02 A9 03 8D 6E 44
4450:20 A1 44 A2 00 A5 FE 29
4458:07 18 69 B0 9D B8 44 A0
4460:03 46 FF 66 FE 88 D0 F9
4468:E8 E0 06 D0 E8 A2 06 4C
4470:54 43 20 A1 44 A0 00 B1
4478:FE F0 AF 20 9A 44 C8 D0
4480:F6 E6 FF 80 F2 20 A1 44
4488:A0 00 B1 FE F0 9C AA C8
4490:B1 FE 20 9A 44 CA D0 F7
4498:F0 90 8D DE C0 EE 9B 44
44A0:60 20 A5 44 AA A0 00 B9
44A8:DE C0 EE A6 44 D0 03 EE
44B0:A9 44 A8 86 FE 84 FF 60
44B8:00 00 00 00 00 00 00 00
44C0:3F 25 62 75 64 23 78 24
44C8:26 40 4F 6F 70 73 61 0D
44D0:44 11 44 2D 44 AE 43 B2
44D8:43 B6 43 20 43 24 43 5F
44E0:43 63 43 47 44 4B 44 85
44E8:44 72 44 76 43
43E8:A2 05 88 B9 B9 43 4A 4A
43F0:4A 4A 18 69 B0 9D B6 44
43F8:CA B9 B9 43 29 0F 18 69
4400:B0 9D B6 44 88 CA 10 E3
4408:A2 00 4C 57 43 A9 31 2C
4410:A9 B1 8D 22 44 20 9F 44
4418:A0 08 8A 0A AA A9 B0 90
4420:02 A9 B1 20 98 44 88 D0
4428:F1 4C 90 43 20 9F 44 8A
4430:10 0A A9 AD 20 98 44 8A
4438:49 FF AA E8 A0 00 A9 03
4440:8D 09 44 4C BE 43 A9 06
4448:2C A9 03 8D 6C 44 20 9F
4450:44 A2 00 A5 FE 29 07 18
4458:69 B0 9D B6 44 A0 03 46
4460:FF 66 FE 88 D0 F9 E8 E0
4468:06 D0 E8 A2 06 4C 57 43
4470:20 9F 44 A0 00 B1 FE F0
4478:B0 20 98 44 C8 D0 F6 E6
4480:FF 80 F2 20 9F 44 A0 00
4488:B1 FE F0 9D AA C8 B1 FE
4490:20 98 44 CA D0 F7 F0 91
4498:8D DE C0 EE 99 44 60 20
44A0:A3 44 AA A0 00 B9 DE C0
44A8:EE A4 44 D0 03 EE A7 44
44B0:A8 86 FE 84 FF 60 00 00
44B8:00 00 00 00 00 00 3F 25
44C0:62 75 64 23 78 24 26 40
44C8:4F 6F 70 73 61 0D 44 10
44D0:44 2C 44 B0 43 B3 43 B6
44D8:43 24 43 27 43 62 43 65
44E0:43 46 44 49 44 83 44 70
44E8:44 78 43
*/
@ -721,8 +721,8 @@ PrintDec
CLD
LDX #5 ; was Y
DEY ; $FF - $FD = 2
@BCD2Char: ; NOTE: Digits are reversed!
DEY ; $FF - $FD = 2
LDA _bcd-$FD,Y ; __c??? _b_?XX a_YYXX
LSR
LSR
@ -730,14 +730,13 @@ PrintDec
LSR
CLC
ADC #'0'+$80
JSR COUT
JSR COUT ; __c??X _b_YXX aZYYXX
DEX
LDA _bcd-$FD,Y ; __c??X _b_YXX aZYYXX
AND #$F
CLC
ADC #'0'+$80
JSR COUT
DEY
JSR COUT ; __c?XX _bYYXX ZZYYXX
DEX
BPL @BCD2Char
RTS
@ -982,8 +981,10 @@ NextArg
DEBUG .sprintf( "PrintHex4() @ %X", * )
PrintHex4:
LDA #4
.if USE_HEX_2
;BNE _PrintHex
db $2C ; BIT $abs skip next instruction
.endif
.endif
.if USE_HEX_2
@ -1048,8 +1049,10 @@ PrintReverseBCD
DEBUG .sprintf( "PrintPtr4() @ %X", * )
PrintPtr4:
LDA #4
.if USE_PTR_2
;BNE _PrintPtr
db $2C ; BIT $abs skip next instruction
.endif
.endif
.if USE_PTR_2
@ -1152,15 +1155,20 @@ _Done
DEBUG .sprintf( "PrintDec5() @ %X", * )
PrintDec5:
LDA #5
BNE _PrintDec ; always
.if USE_DEC_2 || USE_DEC_3
;BNE _PrintDec ; always
db $2C ; BIT $abs skip next instruction
.endif
.endif
.if USE_DEC_3
DEBUG .sprintf( "PrintDec3() @ %X", * )
PrintDec3:
LDA #3
.if USE_DEC_2
;BNE _PrintDec ; always
db $2C ; BIT $abs skip next instruction
.endif
.endif
.if USE_DEC_2
@ -1201,7 +1209,7 @@ DEBUG .sprintf( "PrintDec2() @ %X", * )
BNE @Dec2BCD
CLD
NEW_PRINT_DEC = 0
NEW_PRINT_DEC = 0 ; TODO: FIXME: DEBUG:
.if NEW_PRINT_DEC
DecWidth:
.endif
@ -1256,8 +1264,10 @@ NEW_PRINT_DEC = 0
DEBUG .sprintf( "PrintBinI() @ %X", * )
PrintBinInv:
LDA #$31
.if USE_BIN_ASC
;BNE _PrintBin
db $2C ; BIT $abs skip next instruction
.endif
.endif ; USE_BIN_INV
.if USE_BIN_ASC
@ -1324,8 +1334,10 @@ DEBUG .sprintf( "PrintDecB() @ %X", * )
DEBUG .sprintf( "PrintOct6() @ %X", * )
PrintOct6:
LDA #6
.if USE_OCT_3
;BNE _PrintOct
db $2C ; BIT $abs skip next instruction
.endif
.endif
.if USE_OCT_3
DEBUG .sprintf( "PrintOct3() @ %X", * )