; =============================================================================
; Final handoff 13A9h → JP FF4Ch (type-21h SYSTEM load success)
; Source: VECTOR 4/8086 - V2_AC_Interleaved_XHE_XHO.bin
; CPU: Z80  |  base: 0000h
; See also: docs/06-handoff-13A9-FF4C.md
;           docs/07-dual-cpu-architecture.md  (8086 prep, port 02, ROM scan)
; Callers: JP 13A9 @11BD (type21), vector 002A
;
; Dual-CPU notes:
;   - This ROM has NO 8086 machine code (padding FF then 00 only after 16DB).
;   - 67F0 gets EA + far ptr from SYSTEM file (8086 JMP FAR image).
;   - Stub @0573 does OUT (02),01 — only port-02 write in entire ROM;
;     13A9 copies stub to 674C but does NOT call it; primary transfer is JP FF4C.
; =============================================================================

; --- 13A9: build OS parameter block @67E0 ---
13A9  2160fe            LD HL, FE60h
13AC  22e467            LD (67E4h), HL       ; high ptr FE60
13AF  2100fe            LD HL, FE00h
13B2  22e067            LD (67E0h), HL       ; high ptr FE00
13B5  2afb0f            LD HL, (0FFBh)       ; ROM word (dump: FFFF)
13B8  22e867            LD (67E8h), HL
13BB  210002            LD HL, 0200h
13BE  22ea67            LD (67EAh), HL
13C1  3e48              LD A, 48h
13C3  32ec67            LD (67ECh), A
13C6  217305            LD HL, 0573h         ; ROM stub source
13C9  114c67            LD DE, 674Ch         ; RAM stub dest
13CC  011200            LD BC, 0012h         ; 18 bytes
13CF  edb0              LDIR                 ; copy Z80 handoff stub
13D1  210ce4            LD HL, E40Ch
13D4  22ee67            LD (67EEh), HL
13D7  3eea              LD A, EAh            ; 8086 JMP FAR opcode
13D9  32f067            LD (67F0h), A        ; 67F0: EA; 67F1/F3 from file
13DC  3add5f            LD A, (5FDDh)        ; RAM size flag from cold boot
13DF  32f567            LD (67F5h), A
13E2  b7                OR A
13E3  210010            LD HL, 1000h         ; small RAM base
13E6  2803              JR Z, 13EBh
13E8  210030            LD HL, 3000h         ; large RAM base
13EB  22e267            LD (67E2h), HL
13EE  22e667            LD (67E6h), HL
13F1  2818              JR Z, 140Bh          ; small: skip swap

; --- large RAM: swap 8 bytes 67F0 ↔ 77F0 under bank 3F ---
13F3  163f              LD D, 3Fh
13F5  cd3604            CALL 0436h           ; OUT (16), ~3F
13F8  0608              LD B, 08h
13FA  21f067            LD HL, 67F0h
13FD  11f077            LD DE, 77F0h
1400  1a                LD A, (DE)
1401  4e                LD C, (HL)
1402  77                LD (HL), A
1403  79                LD A, C
1404  12                LD (DE), A
1405  23                INC HL
1406  13                INC DE
1407  10f7              DJNZ 1400h
1409  3e01              LD A, 01h            ; mark large-RAM path in A

; --- mapper rebuild then JP FF4C ---
140B  08                EX AF, AF'           ; save A (0/1) for epilogue
140C  0e16              LD C, 16h            ; mapper port
140E  1600              LD D, 00h            ; bank index
1410  0600              LD B, 00h            ; window base step
1412  7a                LD A, D
1413  2f                CPL
1414  ed79              OUT (C), A           ; OUT (16), ~D
1416  78                LD A, B
1417  c608              ADD A, 08h
1419  47                LD B, A
141A  ca4cff            JP Z, FF4Ch          ; ★ transfer: B wrapped F8→00
141D  14                INC D
141E  fef0              CP F0h               ; A still = B after ADD
1420  2004              JR NZ, 1426h
1422  16ce              LD D, CEh            ; video/attr bank slot
1424  18ec              JR 1412h
1426  fef8              CP F8h
1428  20e8              JR NZ, 1412h
; B==F8: epilogue — one more map then next ADD wraps to JP FF4C
142A  08                EX AF, AF'
142B  b7                OR A                 ; Z if small RAM path
142C  163f              LD D, 3Fh
142E  28e2              JR Z, 1412h          ; final OUT ~3F = C0h
1430  167f              LD D, 7Fh            ; large: final OUT ~7F = 80h
1432  18de              JR 1412h

; After final OUT, B becomes 00 → JP FF4C.
; FF4C is NOT in this ROM (image ends 1FFF). Runs loaded SYSTEM under new map.

; =============================================================================
; Stub source @0573 (copied to 674C) — not executed by 13A9 itself
; =============================================================================
0573  3e01              LD A, 01h
0575  d302              OUT (02h), A         ; dual-CPU / bus signal
0577  0600              LD B, 00h
0579  3e00              LD A, 00h
057B  2f                CPL                 ; A=FFh
057C  0e16              LD C, 16h
057E  ed79              OUT (C), A           ; OUT (16), FFh
0580  db0c              IN A, (0Ch)
0582  c30000            JP 0000h             ; re-enter 0000 under new map

; =============================================================================
; Related: 0436 bank select (used by swap and bulk load)
; =============================================================================
0436  c5                PUSH BC
0437  0e16              LD C, 16h
0439  0670              LD B, 70h
043B  f5                PUSH AF
043C  7a                LD A, D
043D  2f                CPL
043E  ed79              OUT (C), A           ; OUT (16), ~D
0440  f1                POP AF
0441  c1                POP BC
0442  c9                RET

; =============================================================================
; Related: 0420 bulk-load page → bank + HL in 7000 window
; =============================================================================
0420  7b                LD A, E
0421  e607              AND 07h             ; page low 3 bits → 256B offset index
0423  0603              LD B, 03h
0425  b7                OR A
0426  cb1a              RR D
0428  cb1b              RR E                ; DE >>= 1, thrice → bank = page>>3
042A  10f9              DJNZ 0425h
042C  53                LD D, E             ; bank in D for 0436
042D  cd3604            CALL 0436h
0430  210070            LD HL, 7000h
0433  84                ADD A, H            ; H = 70 + (page&7)
0434  67                LD H, A             ; HL = 7X00h
0435  c9                RET

; =============================================================================
; 67xx layout after 13A9 (summary)
; =============================================================================
; 67E0  FE00
; 67E2  1000 or 3000   (5FDD)
; 67E4  FE60
; 67E6  same as 67E2
; 67E8  (0FFB)         dump FFFF
; 67EA  0200
; 67EC  48
; 67EE  E40C
; 67F0  EA + [offset @67F1 from file] + [seg @67F3 from file]  ; 8086 JMP FAR image
; 67F5  (5FDD)
; 67F6  00
; 674C  18-byte stub from 0573
