;; wizball
;;
;; loader in two parts.
;; second part is !                 !
;; displays "Loading: please wait"
;; multi-colour for leader, cyan and black for data
;;
;; target renegade is the same loader, but doesn't use second "!          !"
;; file
b97d 06f6      ld      b,$f6
b97f af        xor     a
b980 ed79      out     (c),a
b982 dd360000  ld      (ix+$00),$00
b986 dd2b      dec     ix
b988 18f8      jr      $b982            ; (-$08)

b98a d1        pop     de
b98b 08        ex      af,af'
b98c fe01      cp      $01
b98e 067f      ld      b,$7f
b990 3e10      ld      a,$10
b992 ed79      out     (c),a
b994 3e54      ld      a,$54
b996 ed79      out     (c),a
b998 d9        exx     
b999 e1        pop     hl
b99a d9        exx     
b99b d8        ret     c

b99c 18df      jr      $b97d            ; (-$21)

b99e 3d        dec     a
b99f 20fd      jr      nz,$b99e         ; (-$03)
b9a1 a7        and     a
b9a2 24        inc     h
b9a3 c8        ret     z

b9a4 06f5      ld      b,$f5
b9a6 ed78      in      a,(c)
b9a8 a9        xor     c
b9a9 e680      and     $80
b9ab 28f5      jr      z,$b9a2          ; (-$0b)
b9ad 067f      ld      b,$7f
b9af 3e10      ld      a,$10
b9b1 ed79      out     (c),a
b9b3 79        ld      a,c
b9b4 2f        cpl     
b9b5 4f        ld      c,a
b9b6 d9        exx     
b9b7 7d        ld      a,l
b9b8 3c        inc     a
b9b9 e60f      and     $0f
b9bb 6f        ld      l,a
b9bc f620      or      $20
b9be d9        exx     
b9bf 17        rla     
b9c0 ed79      out     (c),a
b9c2 37        scf     
b9c3 c9        ret     

b9c4 3d        dec     a
b9c5 20fd      jr      nz,$b9c4         ; (-$03)
b9c7 a7        and     a

b9c8 24        inc     h				; [1]
b9c9 c8        ret     z				; [3]

b9ca 06f5      ld      b,$f5			; [2]
b9cc ed78      in      a,(c)			; [4]
b9ce a9        xor     c				; [1]
b9cf e680      and     $80				; [2]
b9d1 28f5      jr      z,$b9c8          ; [3]
b9d3 067f      ld      b,$7f
b9d5 3e10      ld      a,$10
b9d7 ed79      out     (c),a
b9d9 79        ld      a,c
b9da 2f        cpl     
b9db 4f        ld      c,a
b9dc 1f        rra     
b9dd 3e2a      ld      a,$2a
b9df 17        rla     
b9e0 3d        dec     a
b9e1 ed79      out     (c),a
b9e3 37        scf     
b9e4 c9        ret     

b9e5 06f6      ld      b,$f6
b9e7 3e10      ld      a,$10
b9e9 ed79      out     (c),a
b9eb d9        exx     
b9ec e5        push    hl
b9ed 2e00      ld      l,$00
b9ef d9        exx     
b9f0 218eb9    ld      hl,$b98e
b9f3 e5        push    hl
b9f4 06f5      ld      b,$f5
b9f6 ed78      in      a,(c)
b9f8 e680      and     $80
b9fa 4f        ld      c,a
b9fb cd9eb9    call    $b99e
b9fe 30fb      jr      nc,$b9fb         ; (-$05)
ba00 211504    ld      hl,$0415
ba03 10fe      djnz    $ba03            ; (-$02)
ba05 2b        dec     hl
ba06 7c        ld      a,h
ba07 b5        or      l
ba08 20f9      jr      nz,$ba03         ; (-$07)
ba0a 3e0a      ld      a,$0a
ba0c cd9eb9    call    $b99e
ba0f 30ea      jr      nc,$b9fb         ; (-$16)
ba11 26c4      ld      h,$c4
ba13 3e1c      ld      a,$1c
ba15 cd9eb9    call    $b99e
ba18 30e1      jr      nc,$b9fb         ; (-$1f)
ba1a 3eda      ld      a,$da
ba1c bc        cp      h
ba1d 38f2      jr      c,$ba11          ; (-$0e)
ba1f 26c4      ld      h,$c4
ba21 3e1c      ld      a,$1c
ba23 cd9eb9    call    $b99e
ba26 30d3      jr      nc,$b9fb         ; (-$2d)
ba28 3eda      ld      a,$da
ba2a bc        cp      h
ba2b 38e4      jr      c,$ba11          ; (-$1c)

ba2d fd21d5bb  ld      iy,$bbd5			; pulse length table
ba31 fd6e00    ld      l,(iy+$00)
ba34 26c4      ld      h,$c4
ba36 3e1c      ld      a,$1c
ba38 cd9eb9    call    $b99e
ba3b 30be      jr      nc,$b9fb         ; (-$42)
ba3d 3ed7      ld      a,$d7
ba3f bc        cp      h
ba40 30dd      jr      nc,$ba1f         ; (-$23)
ba42 2c        inc     l
ba43 20ef      jr      nz,$ba34         ; (-$11)
ba45 2670      ld      h,$70
ba47 3e1c      ld      a,$1c
ba49 cd9eb9    call    $b99e
ba4c 30ad      jr      nc,$b9fb         ; (-$53)
ba4e 3e1c      ld      a,$1c
ba50 cd9eb9    call    $b99e
ba53 30a6      jr      nc,$b9fb         ; (-$5a)
ba55 7c        ld      a,h
ba56 fecd      cp      $cd
ba58 300e      jr      nc,$ba68         ; (+$0e)
ba5a fe9c      cp      $9c
ba5c 30cf      jr      nc,$ba2d         ; (-$31)
ba5e fd23      inc     iy
ba60 fd7d      ld      a,iyl
ba62 fed9      cp      $d9				;; b2, d9??
ba64 20cb      jr      nz,$ba31         ; (-$35)
ba66 18c5      jr      $ba2d            ; (-$3b)

ba68 3e0b      ld      a,$0b
ba6a 26b0      ld      h,$b0			
ba6c 2e08      ld      l,$08			;; %00001000 read 5 bits
ba6e 3e0b      ld      a,$0b
ba70 1802      jr      $ba74            ; (+$02)

;; timing constants
ba72 3e0c      ld      a,$0c			;; !!!!!!!!!!!!!!	12
ba74 cdc4b9    call    $b9c4
ba77 d0        ret     nc

ba78 00        nop     
ba79 00        nop     
ba7a 3e0e      ld      a,$0e			;; !!!!!!!!!!!!!!	14
ba7c cdc4b9    call    $b9c4
ba7f d0        ret     nc

ba80 3ec5      ld      a,$c5			;; 1344
ba82 bc        cp      h
ba83 cb15      rl      l				;; 1984
ba85 26b0      ld      h,$b0
ba87 d272ba    jp      nc,$ba72

ba8a 3e1d      ld      a,$1d			;; 00011101
ba8c bd        cp      l
ba8d c27db9    jp      nz,$b97d

ba90 00        nop     
ba91 af        xor     a
ba92 08        ex      af,af'
ba93 26c4      ld      h,$c4			;; timing constant for data
ba95 2e01      ld      l,$01			;; read a byte
ba97 fd2100ac  ld      iy,$ac00			;; 
ba9b 3e07      ld      a,$07			;; timing constant for data
ba9d 1817      jr      $bab6            ; (+$17)

;; L = data-byte
ba9f 3e6f      ld      a,$6f			;; decrypt byte
baa1 ad        xor     l
baa2 c64b      add     a,$4b
baa4 dd7700    ld      (ix+$00),a		;; write byte
baa7 dd23      inc     ix
baa9 1b        dec     de

baaa 26c4      ld      h,$c4			;; timing constant
baac 2e01      ld      l,$01			;; loose 2us (8t states)
baae 2e01      ld      l,$01			;; read a byte
bab0 3e04      ld      a,$04			;; timing constant
bab2 1802      jr      $bab6            ; (+$02)

;; read a data-byte
bab4 3e0c      ld      a,$0c
bab6 cdc4b9    call    $b9c4
bab9 d0        ret     nc

baba 00        nop     
babb 00        nop     
babc 3e0e      ld      a,$0e
babe cdc4b9    call    $b9c4
bac1 d0        ret     nc

bac2 3ed9      ld      a,$d9
bac4 bc        cp      h
bac5 cb15      rl      l
bac7 26c4      ld      h,$c4
bac9 d2b4ba    jp      nc,$bab4
bacc 08        ex      af,af'
bacd ad        xor     l
bace 08        ex      af,af'
bacf 7a        ld      a,d
bad0 b3        or      e
bad1 20cc      jr      nz,$ba9f         ; (-$34)

bad3 c38ab9    jp      $b98a

bad6 3e6f      ld      a,$6f
bad8 ad        xor     l
bad9 c64b      add     a,$4b
badb dd7700    ld      (ix+$00),a
bade dd23      inc     ix
bae0 1b        dec     de

bae1 2e02      ld      l,$02			;; read 7 bits
bae3 3e04      ld      a,$04
bae5 26b3      ld      h,$b3
bae7 cd53bb    call    $bb53
baea d0        ret     nc

baeb fd7e04    ld      a,(iy+$04)
baee b7        or      a
baef 285a      jr      z,$bb4b          ; (+$5a)
baf1 69        ld      l,c
baf2 01007f    ld      bc,$7f00
baf5 00        nop     
baf6 00        nop     
baf7 00        nop     
baf8 fd4e00    ld      c,(iy+$00)
bafb fd4601    ld      b,(iy+$01)
bafe dd210000  ld      ix,$0000
bb02 dd09      add     ix,bc
bb04 4d        ld      c,l

bb05 3e01      ld      a,$01
bb07 2e02      ld      l,$02			;; read 7 bits
bb09 26b3      ld      h,$b3
bb0b cd53bb    call    $bb53
bb0e d0        ret     nc

bb0f 3e7f      ld      a,$7f			;; %0000000 01111111 00000000
bb11 bd        cp      l
bb12 2803      jr      z,$bb17          
bb14 32d4bb    ld      ($bbd4),a

bb17 2e02      ld      l,$02			;; read 7 bits
bb19 3e08      ld      a,$08
bb1b 26b3      ld      h,$b3
bb1d cd53bb    call    $bb53
bb20 d0        ret     nc

bb21 fd5e02    ld      e,(iy+$02)
bb24 fd5603    ld      d,(iy+$03)
bb27 69        ld      l,c
bb28 010500    ld      bc,$0005
bb2b fd09      add     iy,bc
bb2d 4d        ld      c,l

bb2e 7b        ld      a,e
bb2f b2        or      d

bb30 26c4      ld      h,$c4
bb32 2e01      ld      l,$01
bb34 3e04      ld      a,$04
bb36 c2b6ba    jp      nz,$bab6			;; read first byte of data
bb39 118ab9    ld      de,$b98a
bb3c ed53d4ba  ld      ($bad4),de
bb40 11b9ba    ld      de,$bab9
bb43 d5        push    de
bb44 ed5bf7bb  ld      de,($bbf7)
bb48 c3c8b9    jp      $b9c8
bb4b 3e06      ld      a,$06
bb4d 00        nop     
bb4e 00        nop     
bb4f 18b6      jr      $bb07            ; (-$4a)

bb51 3e0d      ld      a,$0d
bb53 cdc4b9    call    $b9c4
bb56 3e10      ld      a,$10
bb58 cdc4b9    call    $b9c4
bb5b d0        ret     nc

bb5c 3edb      ld      a,$db
bb5e bc        cp      h
bb5f cb15      rl      l
bb61 26b3      ld      h,$b3
bb63 d251bb    jp      nc,$bb51
bb66 c9        ret     

bb67 cde5b9    call    $b9e5
bb6a 210080    ld      hl,$8000
bb6d 06ff      ld      b,$ff
bb6f c5        push    bc
bb70 1e00      ld      e,$00
bb72 4b        ld      c,e
bb73 16ff      ld      d,$ff
bb75 06f5      ld      b,$f5
bb77 ed78      in      a,(c)
bb79 e680      and     $80
bb7b a9        xor     c
bb7c 2851      jr      z,$bbcf          ; (+$51)
bb7e 1c        inc     e
bb7f 79        ld      a,c
bb80 2f        cpl     
bb81 e680      and     $80
bb83 4f        ld      c,a
bb84 15        dec     d
bb85 c275bb    jp      nz,$bb75
bb88 73        ld      (hl),e
bb89 23        inc     hl
bb8a c1        pop     bc
bb8b 10e2      djnz    $bb6f            ; (-$1e)
bb8d 210000    ld      hl,$0000
bb90 113280    ld      de,$8032
bb93 0632      ld      b,$32
bb95 c5        push    bc
bb96 1a        ld      a,(de)
bb97 0600      ld      b,$00
bb99 4f        ld      c,a
bb9a 09        add     hl,bc
bb9b 13        inc     de
bb9c c1        pop     bc
bb9d 10f6      djnz    $bb95            ; (-$0a)
bb9f e5        push    hl
bba0 210000    ld      hl,$0000
bba3 11cd80    ld      de,$80cd
bba6 0632      ld      b,$32
bba8 c5        push    bc
bba9 1a        ld      a,(de)
bbaa 0600      ld      b,$00
bbac 4f        ld      c,a
bbad 09        add     hl,bc
bbae 13        inc     de
bbaf c1        pop     bc
bbb0 10f6      djnz    $bba8            ; (-$0a)
bbb2 c1        pop     bc
bbb3 7c        ld      a,h
bbb4 fe00      cp      $00
bbb6 2013      jr      nz,$bbcb         ; (+$13)
bbb8 a7        and     a
bbb9 ed42      sbc     hl,bc
bbbb 013200    ld      bc,$0032
bbbe a7        and     a
bbbf ed42      sbc     hl,bc
bbc1 d8        ret     c

bbc2 09        add     hl,bc
bbc3 01cdff    ld      bc,$ffcd
bbc6 a7        and     a
bbc7 ed42      sbc     hl,bc
bbc9 d0        ret     nc

bbca 3c        inc     a
bbcb 32d4bb    ld      ($bbd4),a
bbce c9        ret     

bbcf 00        nop     
bbd0 00        nop     
bbd1 c384bb    jp      $bb84
bbd4 00        nop     
bbd5 1e2a      ld      e,$2a
bbd7 2822      jr      z,$bbfb          ; (+$22)
bbd9 00        nop     
bbda 00        nop     
bbdb 00        nop     
bbdc 00        nop     
bbdd 00        nop     
bbde 00        nop     
bbdf 00        nop     
bbe0 00        nop     
bbe1 00        nop     
bbe2 00        nop     
bbe3 00        nop     
bbe4 00        nop     
bbe5 00        nop     
bbe6 00        nop     
bbe7 00        nop     
bbe8 00        nop     
bbe9 00        nop     
bbea 00        nop     
bbeb 00        nop     
bbec 00        nop     
bbed 00        nop     
bbee 00        nop     
bbef 00        nop     
bbf0 00        nop     
bbf1 00        nop     
bbf2 00        nop     
bbf3 00        nop     
bbf4 00        nop     
bbf5 00        nop     
bbf6 00        nop     
bbf7 00        nop     
bbf8 00        nop     
bbf9 dd21d9bb  ld      ix,$bbd9
bbfd 11c600    ld      de,$00c6
bc00 cd67bb    call    $bb67
bc03 d0        ret     nc

