;; 3d stunt rider published by Amsoft
;;
;; very early speedlock.

;; 2 speedlock blocks with clicking leader
;; first block is screen, 2nd is main file
;; 
;; 2 loader files, "3d stunt rider" and "!             !"
;; Speedlock 1985, seems to be pre Amstrad version 1
;;
;; speedlock data not encoded

;; set colour 15
bdfe 067f      ld      b,$7f
be00 3e0f      ld      a,$0f
be02 ed79      out     (c),a
be04 3e4c      ld      a,$4c
be06 ed79      out     (c),a
be08 d8        ret     c

; load failed

; clear memory
be09 06f6      ld      b,$f6
be0b af        xor     a
be0c ed79      out     (c),a
be0e dd360000  ld      (ix+$00),$00
be12 dd2b      dec     ix
be14 18f8      jr      $be0e            ; (-$08)

;; pulse timing
be16 3d        dec     a
be17 20fd      jr      nz,$be16         ; (-$03)
be19 a7        and     a

be1a 24        inc     h
be1b c8        ret     z

be1c 06f5      ld      b,$f5
be1e ed78      in      a,(c)
be20 a9        xor     c
be21 e680      and     $80
be23 28f5      jr      z,$be1a          ; (-$0b)

be25 067f      ld      b,$7f
be27 3e0f      ld      a,$0f
be29 ed79      out     (c),a			; colour 15

be2b 79        ld      a,c
be2c 2f        cpl     
be2d 4f        ld      c,a

be2e 79        ld      a,c
be2f 1f        rra     
be30 3e26      ld      a,$26			; flash 
be32 17        rla     
be33 ed79      out     (c),a
be35 37        scf     
be36 c9        ret     

be37 06f6      ld      b,$f6
be39 3e10      ld      a,$10
be3b ed79      out     (c),a			; cassette motor on

be3d 21febd    ld      hl,$bdfe
be40 e5        push    hl
be41 06f5      ld      b,$f5
be43 ed78      in      a,(c)
be45 e680      and     $80
be47 4f        ld      c,a
be48 cd16be    call    $be16
be4b 30fb      jr      nc,$be48         ; (-$05)

be4d 211504    ld      hl,$0415
be50 10fe      djnz    $be50            ; (-$02)
be52 2b        dec     hl
be53 7c        ld      a,h
be54 b5        or      l
be55 20f9      jr      nz,$be50         ; (-$07)

be57 3e0a      ld      a,$0a
be59 cd16be    call    $be16
be5c 30ea      jr      nc,$be48         ; (-$16)

be5e 26c4      ld      h,$c4
be60 3e1c      ld      a,$1c
be62 cd16be    call    $be16
be65 30e1      jr      nc,$be48         ; (-$1f)

be67 3eda      ld      a,$da
be69 bc        cp      h
be6a 38f2      jr      c,$be5e          ; (-$0e)
be6c 26c4      ld      h,$c4
be6e 3e1c      ld      a,$1c
be70 cd16be    call    $be16
be73 30d3      jr      nc,$be48         ; (-$2d)
be75 3eda      ld      a,$da
be77 bc        cp      h
be78 38e4      jr      c,$be5e          ; (-$1c)
be7a fd211cbf  ld      iy,$bf1c
be7e fd6e00    ld      l,(iy+$00)
be81 26c4      ld      h,$c4
be83 3e1c      ld      a,$1c
be85 cd16be    call    $be16
be88 30be      jr      nc,$be48         ; (-$42)
be8a 3ed7      ld      a,$d7
be8c bc        cp      h
be8d 30dd      jr      nc,$be6c         ; (-$23)
be8f 2c        inc     l
be90 20ef      jr      nz,$be81         ; (-$11)
be92 2670      ld      h,$70
be94 3e1c      ld      a,$1c
be96 cd16be    call    $be16
be99 30ad      jr      nc,$be48         ; (-$53)
be9b 3e1c      ld      a,$1c
be9d cd16be    call    $be16
bea0 30a6      jr      nc,$be48         ; (-$5a)
bea2 7c        ld      a,h
bea3 fecd      cp      $cd
bea5 300e      jr      nc,$beb5         ; (+$0e)
bea7 fe9c      cp      $9c
bea9 30cf      jr      nc,$be7a         ; (-$31)
beab fd23      inc     iy
bead fd7d      ld      a,iyl
beaf fe20      cp      $20
beb1 20cb      jr      nz,$be7e         ; (-$35)
beb3 18c5      jr      $be7a            ; (-$3b)
beb5 3e0b      ld      a,$0b
beb7 2680      ld      h,$80
beb9 2e08      ld      l,$08
bebb 3e0b      ld      a,$0b
bebd 1802      jr      $bec1            ; (+$02)

bebf 3e0c      ld      a,$0c
bec1 cd16be    call    $be16
bec4 d0        ret     nc

bec5 00        nop     
bec6 00        nop     
bec7 3e0e      ld      a,$0e
bec9 cd16be    call    $be16
becc d0        ret     nc

becd 3eb9      ld      a,$b9
becf bc        cp      h
bed0 cb15      rl      l
bed2 2680      ld      h,$80
bed4 d2bfbe    jp      nc,$bebf
bed7 3e1d      ld      a,$1d
bed9 bd        cp      l
beda c209be    jp      nz,$be09
bedd 00        nop     
bede af        xor     a
bedf 08        ex      af,af'
bee0 2680      ld      h,$80
bee2 2e01      ld      l,$01
bee4 3e08      ld      a,$08
bee6 1813      jr      $befb            ; (+$13)

;; write byte
bee8 dd7500    ld      (ix+$00),l
beeb dd23      inc     ix
beed 1b        dec     de

beee 2680      ld      h,$80
bef0 2e01      ld      l,$01
bef2 2e01      ld      l,$01
bef4 00        nop     
bef5 3e05      ld      a,$05
bef7 1802      jr      $befb            ; (+$02)


bef9 3e0c      ld      a,$0c
befb cd16be    call    $be16
befe d0        ret     nc

beff 00        nop     
bf00 00        nop     
bf01 3e0e      ld      a,$0e
bf03 cd16be    call    $be16
bf06 d0        ret     nc

bf07 3eb9      ld      a,$b9
bf09 bc        cp      h
bf0a cb15      rl      l
bf0c 2680      ld      h,$80
bf0e d2f9be    jp      nc,$bef9
bf11 08        ex      af,af'
bf12 ad        xor     l
bf13 08        ex      af,af'
bf14 7a        ld      a,d
bf15 b3        or      e
bf16 20d0      jr      nz,$bee8         ; (-$30)
bf18 08        ex      af,af'
bf19 fe01      cp      $01
bf1b c9        ret     

;;------------------------------------------------

;; clicking pilot pulses
bf1c 12        ld      (de),a
bf1d 1a        ld      a,(de)
bf1e 1618      ld      d,$18

;;------------------------------------------------
;;
;; load screen
bf20 dd2100c0  ld      ix,$c000
bf24 110040    ld      de,$4000
bf27 cd37be    call    $be37

;; load main file
bf2a dd214000  ld      ix,$0040
bf2e 1190bd    ld      de,$bd90
bf31 cd37be    call    $be37

;; motor off
bf34 06f6      ld      b,$f6
bf36 af        xor     a
bf37 ed79      out     (c),a

;; execute program
bf39 313700    ld      sp,$0037
bf3c c300ad    jp      $ad00
bf3f 00        nop     

