From a9a102b0e8fe5854b8e84769f81d15c270aea3d0 Mon Sep 17 00:00:00 2001
From: Oliver Schmidt
Date: Sat, 8 Sep 2018 23:29:59 +0200
Subject: [PATCH] Protect random counter against ProDOS.
Although documented nowhere (!!!) ProDOS trashes the random counter locations $4E/$4F. Is discovered this because my TCP connections didn't have random local ports.
It's a really funny coincidence that David Finnigan discovered only 3 years ago the very same issue because of the very same reason: https://groups.google.com/forum/#!topic/comp.sys.apple2.programmer/1ciep_Oetvo
---
libsrc/apple2/mli.s | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/libsrc/apple2/mli.s b/libsrc/apple2/mli.s
index 3e4771400..891cbaa6b 100644
--- a/libsrc/apple2/mli.s
+++ b/libsrc/apple2/mli.s
@@ -6,6 +6,7 @@
.import __dos_type
+ .include "apple2.inc"
.include "mli.inc"
.bss
@@ -23,10 +24,24 @@ callmli:
lda __dos_type
beq oserr
- ; Call MLI and return
+ ; Save random counter
+ lda RNDL
+ pha
+ lda RNDH
+ pha
+
+ ; Call MLI
jsr $BF00 ; MLI call entry point
call: .byte $00
.addr mliparam
+
+ ; Restore random counter and return
+ tax
+ pla
+ sta RNDH
+ pla
+ sta RNDL
+ txa
rts
; Load oserror code and return
--
2.39.5