From 4515241318dabda4cf3d9a240a0d4c4149b4544f Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Wed, 8 Apr 2020 08:26:04 -0400 Subject: [PATCH] drv/acia: fix broken buffer bounds How did this ever work? --- drv/acia.fs | 12 ++++++++---- drv/acia.z80 | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drv/acia.fs b/drv/acia.fs index 9772bf5..a744576 100644 --- a/drv/acia.fs +++ b/drv/acia.fs @@ -36,11 +36,15 @@ ACIA_MEM: Address in memory that can be used variables shared ; : KEY - ( As long as R> == W>-1, it means that buffer is empty ) - BEGIN ACIAR> @ 1 + ACIAW> @ = NOT UNTIL - ( inc then fetch ) - 1 ACIAR> +! + ACIAR> @ 1 + DUP ACIA) @ = IF + DROP ACIA( @ + THEN + + ( As long as R> == W>-1, it means that buffer is empty ) + BEGIN DUP ACIAW> @ = NOT UNTIL + + ACIAR> ! ACIAR> @ C@ ; diff --git a/drv/acia.z80 b/drv/acia.z80 index 6fe5af6..0d33d8b 100644 --- a/drv/acia.z80 +++ b/drv/acia.z80 @@ -39,11 +39,11 @@ ACIA_IO ( advance W> ) HL INCss, ACIAW> LD(nn)HL, - DE ACIA) @ LDdd(nn), + DE ACIA) LDdd(nn), DE SUBHLss, JRNZ, L4 FWR ( skip ) ( end of buffer reached ) - ACIA( @ LDHL(nn), + ACIA( LDHL(nn), ACIAW> LD(nn)HL, L4 FSET ( skip ) L3 FSET L2 FSET ( end )