gigatron/rom/Contrib/psr/multiply/out/half-square.lst
2025-01-28 19:17:01 +03:00

210 lines
11 KiB
Plaintext

* source: C:\Users\peter.russell\Documents\Personal\multiply\Contrib\psr\multiply\src\half-square.asm.py
address
| encoding
| | instruction
| | | operands
| | | |
V V V V
0000 dc00 st $00,[y,x++] ;[x++] <- ⌊$0²/2⌋
0001 dc00 st $00,[y,x++] ;[x++] <- ⌊$1²/2⌋
0002 dc02 st $02,[y,x++] ;[x++] <- ⌊$2²/2⌋
0003 dc04 st $04,[y,x++] ;[x++] <- ⌊$3²/2⌋
0004 dc08 st $08,[y,x++] ;[x++] <- ⌊$4²/2⌋
0005 dc0c st $0c,[y,x++] ;[x++] <- ⌊$5²/2⌋
0006 dc12 st $12,[y,x++] ;[x++] <- ⌊$6²/2⌋
0007 dc18 st $18,[y,x++] ;[x++] <- ⌊$7²/2⌋
0008 dc20 st $20,[y,x++] ;[x++] <- ⌊$8²/2⌋
0009 dc28 st $28,[y,x++] ;[x++] <- ⌊$9²/2⌋
000a dc32 st $32,[y,x++] ;[x++] <- ⌊$a²/2⌋
000b dc3c st $3c,[y,x++] ;[x++] <- ⌊$b²/2⌋
000c dc48 st $48,[y,x++] ;[x++] <- ⌊$c²/2⌋
000d dc54 st $54,[y,x++] ;[x++] <- ⌊$d²/2⌋
000e dc62 st $62,[y,x++] ;[x++] <- ⌊$e²/2⌋
000f dc70 st $70,[y,x++] ;[x++] <- ⌊$f²/2⌋
0010 0001 ld $01 ;Right-shift by four lookup for $1x
start: 0011 0104 ld [$04] ;(A)
0012 200f anda $0f
0013 c201 st [$01] ;[$01] <- A-low.
0014 6104 xora [$04] ;(A)
0015 ee00 bne ac ;ac >>= 4
0016 fc18 bra .multiply.1
0017 0000 ld $00
.multiply.1: 0018 c206 st [$06] ;[$06] <- A-high.
0019 0105 ld [$05] ;(B)
001a 20f0 anda $f0
001b ee00 bne ac ;ac >>= 4
001c fc21 bra .multiply.2
001d 0000 ld $00
001e 0200 nop ;2 fillers
001f 0200 nop
0020 0002 ld $02 ;Right-shift by four lookup for $2x
.multiply.2: 0021 c203 st [$03] ;[$03] <- B-high.
0022 1400 ld $00,y
0023 1007 ld $07,x
0024 a106 suba [$06] ;(A-high)
0025 fe00 bra ac ;[$07] <- ⌊(A-high - B-high)²/2⌋; x <- 8
0026 fc27 bra .multiply.3
.multiply.3: 0027 0103 ld [$03] ;(B-high)
0028 2106 anda [$06] ;(A-high)
0029 2001 anda $01
002a a107 suba [$07] ;(⌊(A-high - B-high)²/2⌋)
002b c202 st [$02] ;[$02] <- high-byte total.
002c 0101 ld [$01] ;(A-low)
002d a103 suba [$03] ;(B-high)
002e fe00 bra ac ;[$08] <- ⌊(A-low - B-high)²/2⌋; x <- 9
002f fc31 bra .multiply.4
0030 0003 ld $03 ;Right-shift by four lookup for $3x
.multiply.4: 0031 0103 ld [$03] ;(B-high)
0032 fd03 bra [$03] ;[$09] <- ⌊B-high²/2⌋; x <- 10
0033 fc34 bra .multiply.5
.multiply.5: 0034 fd01 bra [$01] ;[$0a] <- ⌊A-low²/2⌋; x <- 11
0035 fc41 bra .multiply.6
0036 0200 nop ;10 fillers
0037 0200 nop
0038 0200 nop
* 10 times
0040 0004 ld $04 ;Right-shift by four lookup for $4x
.multiply.6: 0041 2104 anda [$04] ;(A)
0042 2001 anda $01
0043 810a adda [$0a] ;(⌊A-low²/2⌋)
0044 8109 adda [$09] ;(⌊B-high²/2⌋)
0045 a108 suba [$08] ;(⌊(A-low - B-high)²/2⌋)
0046 c203 st [$03] ;[$03] <- A-low * B-high.
0047 200f anda $0f
0048 c207 st [$07] ;[$07] <- low(A-low * B-high).
0049 6103 xora [$03] ;(A-low * B-high)
004a ee00 bne ac ;ac >>= 4
004b fc51 bra .multiply.7
004c 0000 ld $00
004d 0200 nop ;3 fillers
004e 0200 nop
004f 0200 nop
0050 0005 ld $05 ;Right-shift by four lookup for $5x
.multiply.7: 0051 8109 adda [$09] ;(⌊B-high²/2⌋)
0052 8102 adda [$02] ;(high-byte total)
0053 c202 st [$02] ;Update high-byte total
0054 1008 ld $08,x
0055 0105 ld [$05] ;(B)
0056 200f anda $0f
0057 c203 st [$03] ;[$03] <- B-low.
0058 a106 suba [$06] ;(A-high)
0059 fe00 bra ac ;[$08] <- ⌊(B-low - A-high)²/2⌋; x <- 9
005a fc61 bra .multiply.8
005b 0200 nop ;5 fillers
005c 0200 nop
005d 0200 nop
* 5 times
0060 0006 ld $06 ;Right-shift by four lookup for $6x
.multiply.8: 0061 fd03 bra [$03] ;[$09] <- ⌊B-low²/2⌋; x <- 10
0062 fc63 bra .multiply.9
.multiply.9: 0063 0106 ld [$06] ;(A-high)
0064 1006 ld $06,x
0065 fd06 bra [$06] ;[$06] <- ⌊A-high²/2⌋; x <- 7
0066 fc71 bra .multiply.10
0067 0200 nop ;9 fillers
0068 0200 nop
0069 0200 nop
* 9 times
0070 0007 ld $07 ;Right-shift by four lookup for $7x
.multiply.10: 0071 2105 anda [$05] ;(B)
0072 2001 anda $01
0073 8109 adda [$09] ;(⌊B-low²/2⌋)
0074 8106 adda [$06] ;(⌊A-high²/2⌋)
0075 a108 suba [$08] ;(⌊(B-low - A-high)²/2⌋)
0076 c203 st [$03] ;[$03] <- B-low * A-high.
0077 200f anda $0f
0078 c208 st [$08] ;[$08] <- low(B-low * A-high).
0079 6103 xora [$03] ;(B-low * A-high)
007a ee00 bne ac ;ac >>= 4
007b fc81 bra .multiply.11
007c 0000 ld $00
007d 0200 nop ;3 fillers
007e 0200 nop
007f 0200 nop
0080 0008 ld $08 ;Right-shift by four lookup for $8x
.multiply.11: 0081 8106 adda [$06] ;(⌊A-high²/2⌋)
0082 8102 adda [$02] ;(high-byte total)
0083 c202 st [$02] ;Update high-byte total
0084 1006 ld $06,x
0085 0105 ld [$05] ;(B)
0086 200f anda $0f
0087 a101 suba [$01] ;(A-low)
0088 fe00 bra ac ;[$06] <- ⌊(B-low - A-low)²/2⌋; x <- 7
0089 fc91 bra .multiply.12
008a 0200 nop ;6 fillers
008b 0200 nop
008c 0200 nop
* 6 times
0090 0009 ld $09 ;Right-shift by four lookup for $9x
.multiply.12: 0091 0101 ld [$01] ;(A-low)
0092 2105 anda [$05] ;(B)
0093 2001 anda $01
0094 8109 adda [$09] ;(⌊B-low²/2⌋)
0095 810a adda [$0a] ;(⌊A-low²/2⌋)
0096 a106 suba [$06] ;(⌊(B-low - A-low)²/2⌋)
0097 c203 st [$03] ;[$03] <- A-low * B-low.
0098 200f anda $0f
0099 c201 st [$01] ;[$01] <- result low nibble.
009a 6103 xora [$03] ;(A-low * B-low)
009b ee00 bne ac ;ac >>= 4
009c fca1 bra .multiply.13
009d 0000 ld $00
009e 0200 nop ;2 fillers
009f 0200 nop
00a0 000a ld $0a ;Right-shift by four lookup for $ax
.multiply.13: 00a1 8107 adda [$07] ;(low(A-low * B-high))
00a2 8108 adda [$08] ;(low(B-low * A-high))
00a3 c203 st [$03] ;[$03] <- temp.
00a4 8200 adda ac
00a5 8200 adda ac
00a6 8200 adda ac
00a7 8200 adda ac
00a8 4101 ora [$01] ;(result low nibble)
00a9 c201 st [$01] ;[$01] <- low(result).
00aa 0103 ld [$03] ;(temp)
00ab 20f0 anda $f0
00ac ee00 bne ac ;ac >>= 4
00ad fcb1 bra .multiply.14
00ae 0000 ld $00
00af 0200 nop ;filler
00b0 000b ld $0b ;Right-shift by four lookup for $bx
.multiply.14: 00b1 8102 adda [$02] ;(high-byte total)
00b2 c202 st [$02] ;[$02] <- high(result).
end: 00b3 0200 nop
00b4 0200 nop ;12 fillers
00b5 0200 nop
00b6 0200 nop
* 12 times
00c0 000c ld $0c ;Right-shift by four lookup for $cx
00c1 0200 nop ;15 fillers
00c2 0200 nop
00c3 0200 nop
* 15 times
00d0 000d ld $0d ;Right-shift by four lookup for $dx
00d1 0200 nop ;15 fillers
00d2 0200 nop
00d3 0200 nop
* 15 times
00e0 000e ld $0e ;Right-shift by four lookup for $ex
00e1 0200 nop ;15 fillers
00e2 0200 nop
00e3 0200 nop
* 15 times
00f0 000f ld $0f ;Right-shift by four lookup for $fx
00f1 dc70 st $70,[y,x++] ;[x++] <- ⌊($-f)²/2⌋
00f2 dc62 st $62,[y,x++] ;[x++] <- ⌊($-e)²/2⌋
00f3 dc54 st $54,[y,x++] ;[x++] <- ⌊($-d)²/2⌋
00f4 dc48 st $48,[y,x++] ;[x++] <- ⌊($-c)²/2⌋
00f5 dc3c st $3c,[y,x++] ;[x++] <- ⌊($-b)²/2⌋
00f6 dc32 st $32,[y,x++] ;[x++] <- ⌊($-a)²/2⌋
00f7 dc28 st $28,[y,x++] ;[x++] <- ⌊($-9)²/2⌋
00f8 dc20 st $20,[y,x++] ;[x++] <- ⌊($-8)²/2⌋
00f9 dc18 st $18,[y,x++] ;[x++] <- ⌊($-7)²/2⌋
00fa dc12 st $12,[y,x++] ;[x++] <- ⌊($-6)²/2⌋
00fb dc0c st $0c,[y,x++] ;[x++] <- ⌊($-5)²/2⌋
00fc dc08 st $08,[y,x++] ;[x++] <- ⌊($-4)²/2⌋
00fd dc04 st $04,[y,x++] ;[x++] <- ⌊($-3)²/2⌋
00fe dc02 st $02,[y,x++] ;[x++] <- ⌊($-2)²/2⌋
00ff dc00 st $00,[y,x++] ;[x++] <- ⌊($-1)²/2⌋
0100