I experimented a bit more on how to access the Plus ASIC from BASIC. I created three small routines to stop color flashing, write a value to the ASIC and read a value back. These routines can be anywhere in memory, but not in the ASIC page between &4000 and &7FFF. If you use these routines, there will be no problems with interrupts or BASIC code overlapping the ASIC page.
Here is a small program to demonstrate this. Maybe this solution will reduce the incompatibilities with the BASIC compiler. I did not provide RSX commands to reduce the size of the DATA block.
MODE 2
100 MODE 0 : DEFINT a-z : memBase=&A600 : MEMORY memBase-1
110 ' === Unlock ASIC.
120 DATA &FF,&00,&FF,&77,&B3,&51,&A8,&D4,&62,&39,&9C,&46,&2B,&15,&8A,&CD,&EE
130 FOR i=1 TO 17 : READ a : OUT &BC00,a : NEXT
140 ' === Install assembler routines.
150 DATA &CF,&55,&8D,&F3,&DD,&66,&03,&DD,&6E,&02,&01,&B8,&7F,&ED,&49,&73
160 DATA &0E,&A0,&ED,&49,&FB,&C9,&F3,&DD,&66,&03,&DD,&6E,&02,&01,&B8,&7F
170 DATA &ED,&49,&7E,&0E,&A0,&ED,&49,&12,&FB,&C9
180 FOR i=0 TO 41 : READ a : POKE memBase+i,a : NEXT
190 stopFlashing = memBase+0 : asicPoke = memBase+3 : asicPeek = memBase+22
200 ' === Redefine colors.
210 CALL stopFlashing
220 FOR i=0 TO 15
230 r=i : g=i : b=i
240 CALL asicPoke,&6400+i*2,b+16*r : CALL asicPoke,&6401+i*2,g
250 NEXT
260 ' === Draw color gradient and print color values.
270 FOR x = 0 TO 639 STEP 2 : MOVE x,0 : DRAW x,399,x\40 : NEXT
280 FOR i=0 TO 15
290 a%=0 : CALL asicPeek,&6400+i*2,@a% : CALL asicPeek,&6400+i*2+1,@a%+1
300 LOCATE 1,i+1 : PEN 15 : PRINT HEX$(a%)
310 NEXT
320 ' ==== End (MODE resets colors and restarts flashing).
330 CALL &BB18 : MODE 2
' ORG #A600
'
' stop_flashing:
' RST #0008 : DEFW #8D55 ;; LO_JUMP #0D55
'
' asic_poke: PRINT $-#A600
' DI ;; Disable interrupts.
' LD H,(IX+3) : LD L,(IX+2) ;; Get first parameter with address.
' LD BC,#7FB8 : OUT (C),C ;; Blend in ASIC page.
' LD (HL),E ;; Store second parameter value at address.
' LD C,#A0 : OUT (C),C ;; Blend out ASIC page.
' EI : RET ;; Enable interrupts and return to BASIC.
'
' asic_peek: PRINT $-#A600
' DI ;; Disable interrupts.
' LD H,(IX+3) : LD L,(IX+2) ;; Get first parameter with address.
' LD BC,#7FB8 : OUT (C),C ;; Blend in ASIC page.
' LD A,(HL) ;; Load value from address.
' LD C,#A0 : OUT (C),C ;; Blend out ASIC page.
' LD (DE),A ;; Store value at second parameter.
' EI : RET ;; Enable interrupts and return to BASIC.