This commit is contained in:
Michaelangel007 2016-02-18 13:45:00 -08:00
parent 2400ba50e0
commit 6774b67d61
1 changed files with 140 additions and 9 deletions

149
printm.s
View File

@ -1,13 +1,13 @@
; ca65
.feature c_comments
/* Version 13
printm - a printf replacement for 6502
/* Version 14
printm - a printf replacement for 65C02
Michael Pohroeski
Problem:
We want to print this:
Ideally we want to print a single line that includes literal and variables.
.byte "X=## Y=### $=####:@@ %%%%%%%%~????????"
@ -50,14 +50,144 @@ Here is a micro replacement, printm()
Note: The dummy address $C0DE is to force the assembler
to generate a 16-bit address instead of optimizing a ZP operand
Takes up 473 bytes
Demo + Library text dump:
4000:20 58 FC A9 D5 A2 45 A0
4008:23 8E BE 40 8C BF 40 8E
4010:C0 40 8C C1 40 8E 1C 40
4018:8C 1D 40 8D DE C0 8D C2
4020:40 20 5C 40 8D C4 40 A0
4028:00 20 67 40 A2 B8 A0 40
4030:20 00 42 A0 02 20 67 40
4038:A2 E1 A0 40 20 00 42 A0
4040:04 20 67 40 A2 FE A0 40
4048:20 00 42 A0 06 20 67 40
4050:A2 2E A0 41 20 00 42 A9
4058:08 4C 5B FB A2 08 85 FF
4060:06 FF 6A CA D0 FA 60 B9
4068:76 40 8D 8D 43 B9 8E 40
4070:09 04 8D 8E 43 60 00 80
4078:00 80 00 80 00 80 28 A8
4080:28 A8 28 A8 28 A8 50 D0
4088:50 D0 50 D0 50 D0 00 00
4090:01 01 02 02 03 03 00 00
4098:01 01 02 02 03 03 00 00
40A0:01 01 02 02 03 03 D8 BD
40A8:23 A0 D9 BD 64 A0 A4 BD
40B0:78 BA 40 A0 25 FE 3F 00
40B8:A6 40 27 00 BF 00 DE C0
40C0:DE C0 1A DA 1A DA C2 F9
40C8:F4 E5 BD 62 A0 62 A0 62
40D0:A0 62 A0 62 00 C8 C5 CC
40D8:CC CF 00 D7 CF D2 CC C4
40E0:00 C6 40 80 00 FF 00 00
40E8:00 01 00 7F 00 D3 F4 F2
40F0:E9 EE E7 F3 BA A0 A7 73
40F8:A7 AC A7 73 A7 00 ED 40
4100:D5 40 DB 40 C8 CF CD 45
4108:0D D3 F4 F2 E9 EE E7 A0
4110:CC E5 EE A0 B1 B3 C1 F0
4118:F0 EC E5 BA A0 A7 61 A7
4120:A0 A0 D0 E1 F3 E3 E1 EC
4128:BA A0 A7 70 A7 00 16 41
4130:04 41 08 41 00 00 00 00
4138:00 00 00 00 00 00 00 00
4140:00 00 00 00 00 00 00 00
4148:00 00 00 00 00 00 00 00
4150:00 00 00 00 00 00 00 00
4158:00 00 00 00 00 00 00 00
4160:00 00 00 00 00 00 00 00
4168:00 00 00 00 00 00 00 00
4170:00 00 00 00 00 00 00 00
4178:00 00 00 00 00 00 00 00
4180:00 00 00 00 00 00 00 00
4188:00 00 00 00 00 00 00 00
4190:00 00 00 00 00 00 00 00
4198:00 00 00 00 00 00 00 00
41A0:00 00 00 00 00 00 00 00
41A8:00 00 00 00 00 00 00 00
41B0:00 00 00 00 00 00 00 00
41B8:00 00 00 00 00 00 00 00
41C0:00 00 00 00 00 00 00 00
41C8:00 00 00 00 00 00 00 00
41D0:00 00 00 00 00 00 00 00
41D8:00 00 00 00 00 00 00 00
41E0:00 00 00 00 00 00 00 00
41E8:00 00 00 00 00 00 00 00
41F0:00 00 00 00 00 00 00 00
41F8:00 00 00 00 00 00 00 00
4200:8E 9A 43 8C 9B 43 9C 98
4208:43 20 93 43 8E 83 42 8C
4210:84 42 80 6E A9 04 D0 02
4218:A9 02 8D 52 42 20 93 43
4220:8E B0 43 8C B1 43 A2 00
4228:AD B0 43 29 0F C9 0A 90
4230:02 69 06 69 B0 9D AA 43
4238:4E B1 43 6E B0 43 4E B1
4240:43 6E B0 43 4E B1 43 6E
4248:B0 43 4E B1 43 6E B0 43
4250:E8 E0 00 D0 D3 CA 30 22
4258:BD AA 43 20 8C 43 80 F5
4260:A9 04 D0 02 A9 02 8D 52
4268:42 20 93 43 A0 00 B1 FE
4270:AA C8 B1 FE A8 80 A9 20
4278:8C 43 EE 83 42 D0 03 EE
4280:84 42 AD DE C0 F0 14 30
4288:EE A2 0C DD B2 43 F0 05
4290:CA 10 F8 30 E5 8A 0A AA
4298:7C BF 43 60 A9 05 D0 06
42A0:A9 03 D0 02 A9 02 8D 05
42A8:43 20 93 43 8E B0 43 8C
42B0:B1 43 9C AA 43 9C AB 43
42B8:9C AC 43 A2 10 F8 0E B0
42C0:43 2E B1 43 AD AA 43 6D
42C8:AA 43 8D AA 43 AD AB 43
42D0:6D AB 43 8D AB 43 AD AC
42D8:43 6D AC 43 8D AC 43 CA
42E0:D0 DC D8 A2 02 A0 05 BD
42E8:AA 43 4A 4A 4A 4A 18 69
42F0:B0 99 AA 43 88 BD AA 43
42F8:29 0F 18 69 B0 99 AA 43
4300:88 CA 10 E3 A2 00 4C 55
4308:42 A9 81 D0 02 A9 01 8D
4310:21 43 20 93 43 A0 08 8A
4318:C9 80 2A AA 29 01 F0 02
4320:A9 81 49 B0 20 8C 43 88
4328:D0 ED 4C 7A 42 20 93 43
4330:8A 10 0D A9 AD 20 8C 43
4338:8A 49 FF 29 7F 18 69 01
4340:AA A0 00 A9 03 8D 05 43
4348:4C AC 42 20 93 43 A0 00
4350:B1 FE 10 0A 20 8C 43 C8
4358:D0 F6 E6 FF 80 F2 A2 01
4360:09 80 80 20 20 93 43 A0
4368:00 B1 FE F0 BD 20 8C 43
4370:C8 D0 F6 E6 FF 80 F2 20
4378:93 43 A0 00 B1 FE F0 AA
4380:AA C8 B1 FE 20 8C 43 CA
4388:D0 F7 F0 9E 8D DE C0 EE
4390:8D 43 60 20 97 43 AA A0
4398:00 B9 DE C0 EE 98 43 D0
43A0:03 EE 9B 43 A8 86 FE 84
43A8:FF 60 00 00 00 00 00 00
43B0:00 00 3F 25 62 75 64 23
43B8:78 24 26 40 70 73 61 09
43C0:43 0D 43 2D 43 9C 42 A0
43C8:42 A4 42 14 42 18 42 60
43D0:42 64 42 77 43 64 43 4B
43D8:43
To toggle features on / off:
*/
ENABLE_BIN = 0
ENABLE_DEC = 0
ENABLE_BYTE = 0 ; requires ENABLE_DEC
ENABLE_HEX = 0
ENABLE_BIN = 1
ENABLE_DEC = 1
ENABLE_BYTE = 1 ; requires ENABLE_DEC
ENABLE_HEX = 1
ENABLE_PTR = 1 ; requires ENABLE_HEX
ENABLE_STR = 1
@ -340,6 +470,7 @@ DATA4
_nDecWidth = DecWidth +1
.endif ; ENABLE_DEC
; ======================================================================
; printm( format, args, ... )
; ======================================================================
PrintM
@ -738,10 +869,10 @@ MetaChar
.if ENABLE_HEX
db 'x' ; PrintHex4
db '$' ; PrintHex2
.endif
.if ENABLE_PTR
.if ENABLE_PTR
db '&' ; PrintPtr4
db '@' ; PrintPtr2
.endif
.endif
.if ENABLE_STR
db 'p' ; PrintStrP NOTE: Pascal string; C printf 'p' is pointer!