mirror of https://github.com/zxdos/zxuno.git
78 lines
2.0 KiB
Plaintext
78 lines
2.0 KiB
Plaintext
; regs.mac - macros to assign values to CPU registers.
|
|
;
|
|
; SPDX-FileCopyrightText: Copyright (C) 2021 Ivan Tatarinov <ivan-tat@ya.ru>
|
|
;
|
|
; SPDX-License-Identifier: GPL-3.0-or-above
|
|
|
|
; Compatible compilers:
|
|
; SJAsmPlus, <https://github.com/sjasmplus/sjasmplus/>
|
|
|
|
ifndef regs_mac_included
|
|
define regs_mac_included
|
|
|
|
; Load (initialize) A register
|
|
macro ld_a value
|
|
if 0 = value
|
|
xor a ; 1 byte
|
|
else
|
|
ld a, value ; 2 bytes
|
|
endif
|
|
___a=value
|
|
endm
|
|
|
|
; Change A register
|
|
macro chg_a value
|
|
if ___a != value
|
|
if 0 = (value & $ff)
|
|
xor a ; 1 byte
|
|
elseif ((___a + 1) & $ff) = (value & $ff)
|
|
inc a ; 1 byte
|
|
elseif ((___a - 1) & $ff) = (value & $ff)
|
|
dec a ; 1 byte
|
|
elseif (((___a & $7f) << 1) + ((___a & $80) >> 7)) = (value & $ff)
|
|
rlca ; 1 byte
|
|
elseif (((___a & $fe) >> 1) + ((___a & $01) << 7)) = (value & $ff)
|
|
rrca ; 1 byte
|
|
elseif ((___a ^ $ff) & $ff) = (value & $ff)
|
|
cpl ; 1 byte
|
|
else
|
|
ld a, value & $ff ; 2 bytes
|
|
endif
|
|
___a=value
|
|
endif
|
|
endm
|
|
|
|
; Load (initialize) BC register
|
|
macro ld_bc value
|
|
ld bc, value
|
|
___bc=value
|
|
endm
|
|
|
|
; Change BC register
|
|
macro chg_bc value
|
|
if (___bc & $ffff) != (value & $ffff)
|
|
if (___bc & $ff) = (value & $ff)
|
|
if (((___bc >> 8) + 1) & $ff) = ((value >> 8) & $ff)
|
|
inc b
|
|
elseif (((___bc >> 8) - 1) & $ff) = ((value >> 8) & $ff)
|
|
dec b
|
|
else
|
|
ld b, value >> 8
|
|
endif
|
|
elseif ((___bc >> 8) & $ff) = ((value >> 8) & $ff)
|
|
if (((___bc & $ff) + 1) & $ff) = (value & $ff)
|
|
inc c
|
|
elseif (((___bc & $ff) - 1) & $ff) = (value & $ff)
|
|
dec c
|
|
else
|
|
ld c, value & $ff
|
|
endif
|
|
else
|
|
ld bc, value
|
|
endif
|
|
___bc=value
|
|
endif
|
|
endm
|
|
|
|
endif ; !regs_mac_included
|