Shave off 2 more bytes
This commit is contained in:
parent
ab3385672b
commit
8b95ff7cf9
26
README.md
26
README.md
|
@ -1,14 +1,14 @@
|
||||||
# Print unsigned 16-bit
|
# 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:
|
Features:
|
||||||
|
|
||||||
* Highly optimized for space
|
* 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 zero-page usage [version](print_uint16_zp.s) 69 ($45) bytes
|
||||||
* With stack var usage [version](print_uint16_sp.s) 83 ($53) 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
|
* Includes 7 byte demo
|
||||||
|
|
||||||
# Machine Code
|
# Machine Code
|
||||||
|
@ -19,16 +19,16 @@ Sans-Zero-Page version:
|
||||||
|
|
||||||
```asm
|
```asm
|
||||||
0800:A9 12 A2 34 4C 07 08 8E
|
0800:A9 12 A2 34 4C 07 08 8E
|
||||||
0808:57 08 48 A2 00 8E 54 08
|
0808:55 08 A2 00 8E 52 08 8E
|
||||||
0810:8E 55 08 8E 56 08 A2 10
|
0810:53 08 8E 54 08 A2 10 F8
|
||||||
0818:F8 0E 57 08 68 2A 48 A0
|
0818:0E 55 08 2A 48 A0 FD B9
|
||||||
0820:FD B9 57 07 79 57 07 99
|
0820:55 07 79 55 07 99 55 07
|
||||||
0828:57 07 C8 D0 F4 CA D0 E9
|
0828:C8 D0 F4 68 CA D0 E9 D8
|
||||||
0830:68 D8 A0 03 B9 53 08 20
|
0830:A0 03 B9 51 08 20 3F 08
|
||||||
0838:41 08 88 D0 F7 8A F0 0E
|
0838:88 D0 F7 8A F0 0E 60 48
|
||||||
0840:60 48 20 7B F8 20 4B 08
|
0840:20 7B F8 20 49 08 68 29
|
||||||
0848:68 29 0F D0 01 CA E8 F0
|
0848:0F D0 01 CA E8 F0 EF 4C
|
||||||
0850:EF 4C E5 FD 00 00 00 00
|
0850:E5 FD 00 00 00 00
|
||||||
```
|
```
|
||||||
|
|
||||||
With-Zero-Page version:
|
With-Zero-Page version:
|
||||||
|
|
BIN
print_uint16
BIN
print_uint16
Binary file not shown.
|
@ -21,12 +21,11 @@ SCRN2 = $F879
|
||||||
; ======================================================================
|
; ======================================================================
|
||||||
PrintUint16
|
PrintUint16
|
||||||
STX _temp
|
STX _temp
|
||||||
PHA ; Optimized: STA _temp+1
|
|
||||||
|
|
||||||
LDX #0
|
LDX #0 ; Optional 65C02 version
|
||||||
STX _bcd+0
|
STX _bcd+0 ; STZ _bcd+0
|
||||||
STX _bcd+1
|
STX _bcd+1 ; STZ _bcd+1
|
||||||
STX _bcd+2
|
STX _bcd+2 ; STZ _bcd+2
|
||||||
|
|
||||||
Dec2BCD
|
Dec2BCD
|
||||||
LDX #16 ; 16 bits
|
LDX #16 ; 16 bits
|
||||||
|
@ -35,9 +34,8 @@ _Dec2BCD ; https://en.wikipedia.org/wiki/Double_dabble
|
||||||
ASL _temp+0 ; abcd efgh | ijkl mnop |
|
ASL _temp+0 ; abcd efgh | ijkl mnop |
|
||||||
; ROL _temp+1 ; C=a bcde fghi | jklm nop0 |
|
; ROL _temp+1 ; C=a bcde fghi | jklm nop0 |
|
||||||
; ; Bit 7654_3210 | 7654_3210 |
|
; ; Bit 7654_3210 | 7654_3210 |
|
||||||
PLA
|
|
||||||
ROL
|
ROL
|
||||||
PHA
|
PHA ; Optimized: STA _temp+1
|
||||||
|
|
||||||
LDY #$FD ; $00-$FD=-3 bcd[0] bcd[1] bcd[2] bcd[3]
|
LDY #$FD ; $00-$FD=-3 bcd[0] bcd[1] bcd[2] bcd[3]
|
||||||
_DoubleDabble ; Y=FD Y=FE Y=FF Y=00
|
_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
|
STA _bcd-$FD,Y
|
||||||
INY
|
INY
|
||||||
BNE _DoubleDabble
|
BNE _DoubleDabble
|
||||||
|
PLA
|
||||||
DEX
|
DEX
|
||||||
BNE _Dec2BCD
|
BNE _Dec2BCD
|
||||||
|
|
||||||
PLA ; keep stack
|
|
||||||
CLD ; X=0 = output length
|
CLD ; X=0 = output length
|
||||||
|
|
||||||
DecWidth
|
DecWidth
|
||||||
|
|
Loading…
Reference in New Issue