+; ---------------------------------------------------------\r
+\r
+ iff CPU_Z180\r
+\r
+; Get IFF2\r
+; This routine may not be loaded in page zero\r
+;\r
+; return Carry clear, if INTs are enabled.\r
+;\r
+ global getiff\r
+getiff:\r
+ xor a ;clear accu and carry\r
+ push af ;stack bottom := 00xxh\r
+ pop af\r
+ ld a,i ;P flag := IFF2\r
+ ret pe ;exit carry clear, if enabled\r
+ dec sp\r
+ dec sp ;has stack bottom been overwritten?\r
+ pop af\r
+ and a ;if not 00xxh, INTs were\r
+ ret nz ;actually enabled\r
+ scf ;Otherwise, they really are disabled\r
+ ret\r
+\r
+;----------------------------------------------------------------------\r
+\r
+ global selbnk\r
+\r
+; a: bank (0..2)\r
+\r
+selbnk:\r
+ push bc\r
+ ld c,a\r
+ call getiff\r
+ push af\r
+\r
+ ld a,c\r
+ di\r
+ ld (@cbnk),a\r
+ ld a,5\r
+ out (SIOAC),a\r
+ ld a,(mm_sio0)\r
+ rla\r
+ srl c\r
+ rra\r
+ out (SIOAC),a\r
+ ld (mm_sio0),a\r
+\r
+ ld a,5\r
+ out (SIOBC),a\r
+ ld a,(mm_sio1)\r
+ rla\r
+ srl c\r
+ rra\r
+ out (SIOBC),a\r
+ ld (mm_sio1),a\r
+ pop af\r
+ pop bc\r
+ ret c ;INTs were disabled\r
+ ei\r
+ ret\r
+\r
+;----------------------------------------------------------------------\r
+\r
+; c: bank (0..2)\r
+\r
+ if 0\r
+\r
+selbnk:\r
+ ld a,(@cbnk)\r
+ xor c\r
+ and 3\r
+ ret z ;no change\r
+\r
+ call getiff\r
+ push af\r
+ ld a,c\r
+ di\r
+ ld (@cbnk),a\r
+ ld a,5\r
+ out (SIOAC),a\r
+ ld a,(mm_sio0)\r
+ rla\r
+ srl c\r
+ rra\r
+ out (SIOAC),a\r
+ ld (mm_sio0),a\r
+\r
+ ld a,5\r
+ out (SIOBC),a\r
+ ld a,(mm_sio1)\r
+ rla\r
+ srl c\r
+ rra\r
+ out (SIOBC),a\r
+ ld (mm_sio1),a\r
+ pop af\r
+ ret nc ;INTs were disabled\r
+ ei\r
+ ret\r
+\r
+ endif\r
+\r
+;----------------------------------------------------------------------\r
+\r
+ if 0\r
+ ex af,af'\r
+ push af\r
+ ex af,af'\r
+\r
+ rra\r
+ jr nc,stbk1\r
+ ex af,af'\r
+ ld a,5\r
+ out (SIOAC),a\r
+ ld a,(mm_sio0)\r
+ rla\r
+ srl c\r
+ rra\r
+ out (SIOAC),a\r
+ ld (mm_sio1),a\r
+ ex af,af'\r
+\r
+stbk1:\r
+ rra\r
+ jr nc,stbk2\r
+ ex af,af'\r
+ ld a,5\r
+ out (SIOBC),a\r
+ ld a,(mm_sio1)\r
+ rla\r
+ srl c\r
+ rra\r
+ out (SIOBC),a\r
+ ld (mm_sio1),a\r
+ ex af,af'\r
+\r
+stbk2:\r
+ endif\r
+\r
+ global @cbnk\r
+ global mm_sio0, mm_sio1\r
+\r
+@cbnk: db 0 ; current bank (0..2)\r
+mm_sio0:\r
+ ds 1\r
+mm_sio1:\r
+ ds 1\r
+\r
+\r
+ endif\r
+\r
+;----------------------------------------------------------------------\r
+\r