GPL20  ANDI R12,>FF00
       AI   R12,24
       LDCR @ZERO,4

       LI   R0,STINIT
       MOV  R0,@STACK

* If we're doing a write, we have to invalidate the cache

       MOVB @>834C,R6
       ANDI R6,>0F00
       AI   R6,>FF00
       CB   @>834D,@ZERO
       JNE  GPL2BB
       LDCR @B04,4       Select RAM bank 4
       LI   R4,DNCASH
GPL20A CB   *R4,R6
       JNE  GPL20B
       CLR  *R4
GPL20B AI   R4,48
       CI   R4,>5FFE-48
       JL   GPL20A
GPL2BB LDCR @ZERO,4      Select RAM bank 0

       MOVB @>834C,R1
       ANDI R1,>4000
       JEQ  GPL20C
       SB   @B01,@>834C

       BLWP @BANKIT
       DATA SCSI20
       INCT R11
       ANDI R12,>FF00
       RT

GPL20C LI   R1,SECBUF
       MOV  @>8350,R8
       MOV  @>8352,R7
       SRL  R8,1
       JNC  GPL20D
       AI   R1,>0100
GPL20D SRL  R7,1
       JNC  GPL20E
       ORI  R8,>8000
GPL20E LI   R0,256
       MOV  @>834E,R3        Get buffer location
       MOVB @>834D,R2        Check for read/write
       JEQ  GPL20I
       BLWP @BANKIT
       DATA SCSIRD

       MOVB @>834C,R2        Check buffer location
       ANDI R2,>8000
       JEQ  GPL20G

GPL20F MOVB *R1+,*R3+
       DEC  R0
       JNE  GPL20F
       ANDI R12,>FF00
       INCT R11
       RT

GPL20G ANDI R3,>8000
       SWPB R3
       MOVB R3,@VDPWA
       SWPB R3
       MOVB R3,@VDPWA
       NOP
GPL20H MOVB *R1+,@VDPWD
       DEC  R0
       JNE  GPL20H
       ANDI R12,>FF00
       INCT R11
       RT

GPL20I
       BLWP @BANKIT
       DATA SCSIRD

       MOVB @>834C,R2        Check buffer location
       ANDI R2,>8000
       JEQ  GPL20K

GPL20J MOVB *R3+,*R1+
       DEC  R0
       JNE  GPL20J
       BLWP @BANKIT
       DATA SCSIWT
       ANDI R12,>FF00
       INCT R11
       RT

GPL20K SWPB R3
       MOVB R3,@VDPWA
       SWPB R3
       MOVB R3,@VDPWA
       NOP
GPL20L MOVB @VDPRD,*R1+
       DEC  R0
       JNE  GPL20L
       BLWP @BANKIT
       DATA SCSIWT
       ANDI R12,>FF00
       INCT R11
       RT
