1: / C library -- printf 2: 3: 4: .globl _printf 5: 6: .globl pfloat 7: .globl pscien 8: .globl _putchar 9: 10: .globl csv 11: .globl cret 12: 13: _printf: 14: jsr r5,csv 15: sub $126.,sp 16: mov 4(r5),formp / format 17: mov r5,r4 18: add $6,r4 / arglist 19: loop: 20: movb *formp,r0 21: beq 1f 22: inc formp 23: cmp r0,$'% 24: beq 2f 25: 3: 26: mov r0,(sp) 27: jsr pc,*$_putchar 28: br loop 29: 1: 30: jmp cret 31: 2: 32: clr rjust 33: clr ndigit 34: cmpb *formp,$'- 35: bne 2f 36: inc formp 37: inc rjust 38: 2: 39: jsr r3,gnum 40: mov r1,width 41: clr ndfnd 42: cmp r0,$'. 43: bne 1f 44: jsr r3,gnum 45: mov r1,ndigit 46: 1: 47: mov sp,r3 48: add $4,r3 49: mov $swtab,r1 50: 1: 51: mov (r1)+,r2 52: beq 3b 53: cmp r0,(r1)+ 54: bne 1b 55: jmp (r2) 56: .data 57: swtab: 58: decimal; 'd 59: octal; 'o 60: hex; 'x 61: float; 'f 62: scien; 'e 63: charac; 'c 64: string; 's 65: logical; 'l 66: remote; 'r 67: 0; 0 68: .text 69: 70: decimal: 71: mov (r4)+,r1 72: bge 1f 73: neg r1 74: movb $'-,(r3)+ 75: br 1f 76: 77: logical: 78: mov (r4)+,r1 79: 1: 80: jsr pc,1f 81: br prbuf 82: 1: 83: clr r0 84: div $10.,r0 85: mov r1,-(sp) 86: mov r0,r1 87: beq 1f 88: jsr pc,1b 89: 1: 90: mov (sp)+,r0 91: add $'0,r0 92: movb r0,(r3)+ 93: rts pc 94: 95: charac: 96: movb (r4)+,(r3)+ 97: bne 1f 98: dec r3 99: 1: 100: movb (r4)+,(r3)+ 101: bne prbuf 102: dec r3 103: br prbuf 104: 105: string: 106: mov ndigit,r1 107: clr r3 108: mov (r4),r2 109: 1: 110: tstb (r2)+ 111: beq 1f 112: inc r3 113: sob r1,1b 114: 1: 115: mov (r4)+,r2 116: br prstr 117: 118: hex: 119: mov $1f,r2 120: .data 121: 1: 122: -4; !17 123: .text 124: br 2f 125: 126: octal: 127: mov $1f,r2 128: .data 129: 1: 130: -3; !7 131: .text 132: 2: 133: mov (r4)+,r1 134: beq 2f 135: tst ndigit 136: beq 2f 137: movb $'0,(r3)+ 138: 2: 139: clr r0 140: jsr pc,1f 141: br prbuf 142: 1: 143: mov r1,-(sp) 144: ashc (r2),r0 145: beq 1f 146: jsr pc,1b 147: 1: 148: mov (sp)+,r0 149: bic 2(r2),r0 150: add $'0,r0 151: cmp r0,$'9 152: ble 1f 153: add $'A-'0-10.,r0 154: 1: 155: movb r0,(r3)+ 156: rts pc 157: 158: float: 159: mov ndigit,r0 160: mov ndfnd,r2 161: jsr pc,pfloat 162: br prbuf 163: 164: scien: 165: mov ndigit,r0 166: mov ndfnd,r2 167: jsr pc,pscien 168: br prbuf 169: 170: remote: 171: mov (r4)+,r4 172: mov (r4)+,formp 173: jmp loop 174: 175: prbuf: 176: mov sp,r2 177: add $4,r2 178: sub r2,r3 179: prstr: 180: mov r4,-(sp) 181: mov $' ,-(sp) 182: mov r3,r4 183: neg r3 184: add width,r3 185: ble 1f 186: tst rjust 187: bne 1f 188: 2: 189: jsr pc,*$_putchar 190: sob r3,2b 191: 1: 192: tst r4 193: beq 2f 194: 1: 195: movb (r2)+,(sp) 196: jsr pc,*$_putchar 197: sob r4,1b 198: 2: 199: tst r3 200: ble 1f 201: mov $' ,(sp) 202: 2: 203: jsr pc,*$_putchar 204: sob r3,2b 205: 1: 206: tst (sp)+ 207: mov (sp)+,r4 208: jmp loop 209: 210: gnum: 211: clr ndfnd 212: clr r1 213: 1: 214: movb *formp,r0 215: inc formp 216: sub $'0,r0 217: cmp r0,$'*-'0 218: bne 2f 219: mov (r4)+,r0 220: br 3f 221: 2: 222: cmp r0,$9. 223: bhi 1f 224: 3: 225: inc ndfnd 226: mul $10.,r1 227: add r0,r1 228: br 1b 229: 1: 230: add $'0,r0 231: rts r3 232: 233: .bss 234: width: .=.+2 235: formp: .=.+2 236: rjust: .=.+2 237: ndfnd: .=.+2 238: ndigit: .=.+2