умножение на Z80,дубль неизвестно какой

 Вернулся к старой задаче и накосячил чего-то там, умножение не заработало.

Идея была в использовании таблицы квадратов, и на этом методе и была ошибка. Статья подсказала другой способ

;sjasmplus
;http://www.cpcwiki.eu/index.php/Programming:Precalculated_square
;INITSQ LD DE, 1 ;1st odd number
; LD HL, 0 ;HL = 1st square number
; LD B, H ;counter = 256
; LD IX, SQTAB ;startaddress of the square table
;SQLOOP LD (IX), L ;Lowbyte to table
; INC IX
; LD (IX), H ;Highbyte to table
; INC IX
; ADD HL, DE ;add odd number
; INC DE ;next odd number
; INC DE
; DJNZ SQLOOP ;256 times
; RET
device zxspectrum128
        ORG #6000
begin
sqt=$8000
ld de,1
ld hl,0;ld h,d,l,h
exx
ld hl,sqt
ld bc,sqt
exx
gens:
push hl
exx
pop de
srl d:rr e
srl d:rr e
ld (hl),e:inc h
ld (hl),d:dec h
ld a,e
ld (bc),a:inc b
ld a,d
ld (bc),a:dec b
dec c
inc l
ld a,l
cp 129
exx
jp z,nex_gen
add hl,de
inc de,de
jr gens
nex_gen:
;mul
ld a,1
ld d,-4
;https://www.msxcomputermagazine.nl/mccw/92/Multiplication/en.html
; IN : A and D are to be multiplied
; OUT: HL is result
; CHANGES : AF,BC,E,HL
;
LD E,A
SUB D
LD H,sqt/256
LD L,A
LD C,(HL)
INC H
LD B,(HL)
LD A,E
ADD A,D
LD L,A
LD E,(HL)
DEC H
LD L,(HL)
LD H,E
OR A
SBC HL,BC
;wrong:
; ld d,1
; ld e,-4
;
; ld a,e
; add a,d
; ld h,sqt/256
; ld l,e
; ld c,(hl):inc h
; ld b,(hl)
;
; ld l,d
; ld d,(hl):dec h
; ld e,(hl)
;
; ld l,a
; ld a,(hl):inc h
; ld h,(hl)
; ld l,a
; or a:sbc hl,de
; or a:sbc hl,bc
;
; srl h
; rr l
jr $
end
display /d,end-begin
savesna "!void.sna",begin



Комментарии