diff --git a/README.md b/README.md index ed35679..6a7ecf3 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # Print unsigned 16-bit -6502 assembly code to print an unsigned 16-bit. +6502 assembly code to print an unsigned 16-bit in decimal. Features: * Highly optimized for space -* No zero-page usage [version](print_uint16.s) 81 ($51) bytes +* No zero-page usage [version](print_uint16.s) 79 ($4F) bytes * With zero-page usage [version](print_uint16_zp.s) 69 ($45) bytes * With stack var usage [version](print_uint16_sp.s) 83 ($53) bytes -* Only 2 ROM entry points: COUT, SCRN2 +* Only 2 ROM entry points used: PRHEXZ, SCRN2 * Includes 7 byte demo # Machine Code @@ -19,16 +19,16 @@ Sans-Zero-Page version: ```asm 0800:A9 12 A2 34 4C 07 08 8E -0808:57 08 48 A2 00 8E 54 08 -0810:8E 55 08 8E 56 08 A2 10 -0818:F8 0E 57 08 68 2A 48 A0 -0820:FD B9 57 07 79 57 07 99 -0828:57 07 C8 D0 F4 CA D0 E9 -0830:68 D8 A0 03 B9 53 08 20 -0838:41 08 88 D0 F7 8A F0 0E -0840:60 48 20 7B F8 20 4B 08 -0848:68 29 0F D0 01 CA E8 F0 -0850:EF 4C E5 FD 00 00 00 00 +0808:55 08 A2 00 8E 52 08 8E +0810:53 08 8E 54 08 A2 10 F8 +0818:0E 55 08 2A 48 A0 FD B9 +0820:55 07 79 55 07 99 55 07 +0828:C8 D0 F4 68 CA D0 E9 D8 +0830:A0 03 B9 51 08 20 3F 08 +0838:88 D0 F7 8A F0 0E 60 48 +0840:20 7B F8 20 49 08 68 29 +0848:0F D0 01 CA E8 F0 EF 4C +0850:E5 FD 00 00 00 00 ``` With-Zero-Page version: diff --git a/print_uint16 b/print_uint16 index b8cfe95..e559b16 100644 Binary files a/print_uint16 and b/print_uint16 differ diff --git a/print_uint16.s b/print_uint16.s index 9a74f1d..5ce54d4 100644 --- a/print_uint16.s +++ b/print_uint16.s @@ -21,12 +21,11 @@ SCRN2 = $F879 ; ====================================================================== PrintUint16 STX _temp - PHA ; Optimized: STA _temp+1 - LDX #0 - STX _bcd+0 - STX _bcd+1 - STX _bcd+2 + LDX #0 ; Optional 65C02 version + STX _bcd+0 ; STZ _bcd+0 + STX _bcd+1 ; STZ _bcd+1 + STX _bcd+2 ; STZ _bcd+2 Dec2BCD LDX #16 ; 16 bits @@ -35,9 +34,8 @@ _Dec2BCD ; https://en.wikipedia.org/wiki/Double_dabble ASL _temp+0 ; abcd efgh | ijkl mnop | ; ROL _temp+1 ; C=a bcde fghi | jklm nop0 | ; ; Bit 7654_3210 | 7654_3210 | - PLA ROL - PHA + PHA ; Optimized: STA _temp+1 LDY #$FD ; $00-$FD=-3 bcd[0] bcd[1] bcd[2] bcd[3] _DoubleDabble ; Y=FD Y=FE Y=FF Y=00 @@ -46,10 +44,10 @@ _DoubleDabble ; Y=FD Y=FE Y=FF Y=00 STA _bcd-$FD,Y INY BNE _DoubleDabble + PLA DEX BNE _Dec2BCD - PLA ; keep stack CLD ; X=0 = output length DecWidth