Arnitech controller: the TOD set at boot, and a jump table at $FF00

A new option, ARNITECH_CONTROLLER, on in the mc64 configuration only.
IOINIT starts timer A with CIA #1's TOD on 50 Hz, the mc64's mains, and
if the Arnitech controller's signature "ARNI" is at $DE80, latches its
clock and copies its real time into the TOD, hours first and tenths
last, flipping bit 7 of an hour of 12 first, since the CIA flips it
back when 12 is written. Without the signature the TOD is left alone.

The Arnitech jump table at $FF00: "ARNI", version $01, two entries, and
JMPs from $FF06: $FF06 finds the first Card slot holding a Card of the
type in A (carry clear, the slot in A, its Card window's low byte in
X; carry set if none or no controller), $FF09 sets the TOD as IOINIT
does. $FF48-$FF80 stay clear. The code is in new files under
src/kernal/arnitech; other configurations build as before.
This commit is contained in:
chris committed 2026-10-17 02:17:45 +02:00
1 parent 0ec343a727
commit 03e2d4a4b8
8 files changed
+208

No files matched your search

+26
View File
@@ -0,0 +1,26 @@
;
; Names of the Arnitech controller's registers, on the expansion port's I/O1 (mc64 only)
;
; See arnitech's ADR 0023, "The Arnitech controller answers $DE80-$DE9F, and six Card windows
; follow it" (https://git.susdog.de/chris/arnitech, docs/adr/0023-arnitech-controller-register-map.md)
;
!ifdef CONFIG_ARNITECH_CONTROLLER {
!addr ARNITECH_SIGNATURE = $DE80 ; "ARNI", 4 bytes
!addr ARNITECH_VERSION = $DE84
!addr ARNITECH_SLOT_COUNT = $DE85 ; Card slots in this Case
!addr ARNITECH_IRQ_STATUS = $DE86
!addr ARNITECH_IRQ_MASK = $DE87
!addr ARNITECH_SLOT_TABLE = $DE88 ; the type of the Card in slots 0-5, $00 for none
!addr ARNITECH_CLOCK_LATCH = $DE90 ; a read copies the clock into $DE91-$DE9E
!addr ARNITECH_CLOCK_TEN = $DE91 ; real time as CIA1's TOD reads it: tenths,
!addr ARNITECH_CLOCK_SEC = $DE92 ; seconds,
!addr ARNITECH_CLOCK_MIN = $DE93 ; minutes,
!addr ARNITECH_CLOCK_HRS = $DE94 ; hours, BCD 1-12, bit 7 PM
!addr ARNITECH_CARD_WINDOW = $DEA0 ; slot n's Card window at $DEA0 + 16 * n
}