Code : Tout sélectionner
!to "joytest.prg",cbm
*=$0801 ;Set BASIC SYS start header
!BASIC 2064
*=$0810 ;Set main code
;* = $1000 ; départ en 4096
;.Start
jsr $e544 ; effacer l'écran
; texte de présentation
!for COL = 0 To 35
lda INTL1 + COL
sta $400 + 40 + COL
!end
!for COL=0 To 10
lda INTL2 + COL
sta $400 +160 + COL
!end
; dessiner les joysticks en petscii
!for COL = 0 TO 4
lda JOYZ1 + COL
sta $4F0 + COL
sta $4F0 + COL + 6
lda JOYZ2 + COL
sta $518 + COL
sta $518 + COL + 6
sta $568 + COL
sta $568 + COL + 6
lda JOYZ3 + COL
sta $540 + COL
sta $540 + COL + 6
lda JOYZ4 + COL
sta $590 + COL
sta $590 + COL + 6
!end
; dessiner les rails pour les potars 1 à 4
!for COL = 0 To 31
lda #$43
sta $5E0 + 40 + COL
sta $5E0 +120 + COL
sta $5E0 +200 + COL
sta $5E0 +280 + COL
!end
; désignations liées aux potars
!for COL= 0 To 2
lda INTL3 + COL
sta $5E0 + COL
sta $5E0 + COL + 80
sta $5E0 + COL + 160
sta $5E0 + COL + 240
!end
lda INTL3+4
sta $5E0 + 4
sta $5E0 + 80 + 4
lda INTL3+5
sta $5E0 + 160 + 4
sta $5E0 + 240 + 4
lda INTL3+6
sta $5E0 + 5
sta $5E0 + 160 + 5
lda INTL3+7
sta $5E0 + 80 + 5
sta $5E0 + 240 + 5
; Mise en place des 4 sprites
lda #$0F ; Les 4 premiers sprites
sta $D015 ; sprites On/Off
; graphisme des sprites
!for COL=0 To 62
lda SPRDATA + COL
sta $3000 + COL
!end
; sprites pointers
!for COL=0 to 3
lda #$C0
sta $07F8 + COL
!end
; sprites colors
lda #$01
sta $D027
sta $D028
sta $D029
sta $D02A
; dilatation des sprites en x
lda #$0F
sta $D01D
; positions en X par défaut au départ en 128
!for COL=0 To 3
lda #$80
sta $D000 + (COL*2)
!end
; positions en Y invariable
lda #$9A
sta $D001
lda #$AA
sta $D003
lda #$BA
sta $D005
lda #$CA
sta $D007
; désactivation du clavier par $E0, activation avec $FF
lda #$E0
sta $DC02
.JoyStickTest
; initialisations registres x et y
ldx #$51 ; charge le caractère 81D dans X pour symboliser ACTIF
ldy #$2e ; charge le caractère 46D dans Y pour symboliser INACTIF
;.JoyStick1
LDA $dc01 ; récupère l'octet associé au port joystick 1
and #$10 ; garde le bit 5 dans A (FIRE)
beq .Fire1Set ; si A=0, fire est actif, on branche sur affichage de X
sty $04f3 ; sinon on affiche Y
jmp .Right1 ; et on va au cas suivant
.Fire1Set
stx $04f3 ; on affiche X
.Right1 ; RIGHT bit 8
LDA $dc01 ; récupère l'octet associé au port joystick 1
and #$08 ; garde le bit 5 dans A (RIGHT)
beq .Right1Set ; si A=0, right est actif, on branche sur affichage de X
sty $0543 ; sinon on affiche Y
jmp .Left1 ; et on va au cas suivant
.Right1Set
stx $0543 ; on affiche X
.Left1
LDA $dc01 ; récupère l'octet associé au port joystick 1
and #$04 ; garde le bit 3 dans A (LEFT)
beq .Left1Set ; si A=0, left est actif, on branche sur affichage de X
sty $0541 ; sinon on affiche Y
jmp .Up1 ; et on va au cas suivant
.Left1Set
stx $0541 ; on affiche X
.Up1
LDA $dc01 ; récupère l'octet associé au port joystick 1
and #$01 ; garde le bit 1 dans A (UP)
beq .Up1Set ; si A=0, up est actif, on branche sur affichage de X
sty $051a ; sinon on affiche Y
jmp .Dw1 ; et on va au cas suivant
.Up1Set
stx $051a ; on affiche X
.Dw1
LDA $dc01 ; récupère l'octet associé au port joystick 1
and #$02 ; garde le bit 2 dans A (DW)
beq .Dw1Set ; si A=0, up est actif, on branche sur affichage de X
sty $056a ; sinon on affiche Y
jmp .JoyStick2 ; et on va au cas suivant
.Dw1Set
stx $056a ; on affiche X
.JoyStick2
LDA $dc00 ; récupère l'octet associé au port joystick 2
and #$10 ; garde le bit 5 dans A (FIRE)
beq .Fire2Set ; si A=0, fire est actif, on branche sur affichage de X
sty $04f9 ; sinon on affiche Y
jmp .Right2 ; et on va au cas suivant
.Fire2Set
stx $04f9 ; on affiche X
.Right2 ; RIGHT bit 8
LDA $dc00 ; récupère l'octet associé au port joystick 2
and #$08 ; garde le bit 4 dans A (RIGHT)
beq .Right2Set ; si A=0, right est actif, on branche sur affichage de X
sty $0549 ; sinon on affiche Y
jmp .Left2 ; et on va au cas suivant
.Right2Set
stx $0549 ; on affiche X
.Left2
LDA $dc00 ; récupère l'octet associé au port joystick 2
and #$04 ; garde le bit 3 dans A (LEFT)
beq .Left2Set ; si A=0, left est actif, on branche sur affichage de X
sty $0547 ; sinon on affiche Y
jmp .Up2 ; et on va au cas suivant
.Left2Set
stx $0547 ; on affiche X
.Up2
LDA $dc00 ; récupère l'octet associé au port joystick 2
and #$01 ; garde le bit 1 dans A (UP)
beq .Up2Set ; si A=0, up est actif, on branche sur affichage de X
sty $0520 ; sinon on affiche Y
jmp .Dw2 ; et on va au cas suivant
.Up2Set
stx $0520 ; on affiche X
.Dw2
LDA $dc00 ; récupère l'octet associé au port joystick 2
and #$02 ; garde le bit 1 dans A (DW)
beq .Dw2Set ; si A=0, up est actif, on branche sur affichage de X
sty $0570 ; sinon on affiche Y
jmp .FinJoy ; et on va au cas suivant
.Dw2Set
stx $0570 ; on affiche X
.FinJoy
;.paddle A - placer $DC00 à 01xxxxxx
lda $DC00 ; on charge la valeur de DC00
ora #$40 ; OR avec 0100 0000 pour avoir x1xx xxxx
and #$7F ; AND avec 0111 1111 pour avoir 01xx xxxx
sta $DC00 ; ecrire dans $DC00
jsr .boucle500 ; il faut attendre 500 cycles avant de lire le SID
lda #$FF ; charge FF dans A
sbc $D419 ; soustraction de la valeur X du paddle A
sta $D000 ; ecrite sur position X du sprite 1
lda #$FF ; charge FF dans A
sbc $D41A ; soustraction de la valeur Y du paddle A
sta $D002 ; ecrite sur position X du sprite 2
;.paddel B - placer $DC00 à 10xxxxxx
lda $DC00 ; on charge la valeur de DC00
ora #$80 ; OR avec 1000 0000 pour avoir 1xxx xxxx
and #$BF ; AND avec 1011 1111 pour avoir 10xx xxxx
sta $DC00 ; ecrire dans $DC00
jsr .boucle500 ; il faut attendre 500 cycles avant de lire le SID
lda #$FF ; charge FF dans A
sbc $D419 ; soustraction de la valeur X du paddle B
sta $D004 ; ecrite sur position X du sprite 3
lda #$FF ; charge FF dans A
sbc $D41A ; soustraction de la valeur Y du paddle B
sta $D006 ; ecrite sur position X du sprite 4
jmp .JoyStickTest ; on reboucle au début de tests des joystick
.boucle500
!for COL=0 To 1000
inc $400
nop
!end
rts
;screen char data - texte introduction
!CT SCR
INTL1 !TEXT "joystick / paddle test - f.r.k. 2021"
INTL2 !TEXT "port1 port2"
;screen char data - dessin des joystick en petscii
JOYZ1 !byte $55,$40,$40,$43,$49
JOYZ2 !byte $42,$20,$20,$20,$5d
JOYZ3 !byte $42,$20,$5b,$20,$5d
JOYZ4 !byte $4a,$43,$43,$43,$4b
;screen char data - pour les potar
INTL3 !TEXT "pot abxy"
; data de dessin des sprites
SPRDATA !byte $00,$08,$00,$00,$08,$00,$00,$08,$00,$00,$08,$00,$00,$08,$00,$00,$08,$00,$00,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00