diff --git a/emul/forth/z80c.bin b/emul/forth/z80c.bin index 299316f..384f623 100644 Binary files a/emul/forth/z80c.bin and b/emul/forth/z80c.bin differ diff --git a/forth/forth.asm b/forth/forth.asm index d9e95e4..256db17 100644 --- a/forth/forth.asm +++ b/forth/forth.asm @@ -1505,31 +1505,13 @@ DIVMOD: jp next - .db "XOR" - .fill 4 - .dw $-DIVMOD - .db 0 -XOR: - .dw nativeWord - pop hl - pop de - call chkPS - ld a, e - xor l - ld l, a - ld a, d - xor h - ld h, a - push hl - jp next - ; It might look peculiar to have specific words for "0" and "1", but although ; it slightly beefs ups the ASM part of the binary, this one-byte-save-per-use ; really adds up when we compare total size. .db "0" .fill 6 - .dw $-XOR + .dw $-DIVMOD .db 0 ZERO: .dw nativeWord diff --git a/forth/z80a.fs b/forth/z80a.fs index 6551fcb..7475ff5 100644 --- a/forth/z80a.fs +++ b/forth/z80a.fs @@ -54,6 +54,7 @@ ; 0xa0 OP1r0 ANDr, 0xb0 OP1r0 ORr, +0xa8 OP1r0 XORr, ( qq -- also works for ss ) : OP1qq diff --git a/forth/z80c.fs b/forth/z80c.fs index 0f359b4..79f637c 100644 --- a/forth/z80c.fs +++ b/forth/z80c.fs @@ -97,6 +97,19 @@ CODE OR HL PUSHqq, ;CODE +CODE XOR + HL POPqq, + DE POPqq, + chkPS, + A E LDrr, + L XORr, + L A LDrr, + A D LDrr, + H XORr, + H A LDrr, + HL PUSHqq, +;CODE + CODE PC! BC POPqq, HL POPqq,