Joysticks op de C-16 en Plus/4

Embed Size (px)

DESCRIPTION

Joysticks op de C-16 en Plus/4

Citation preview

  • Joysticks uitlezen op de Plus/4 en C-16 is in Basic niet zo verschrikkelijk moeilijk. Inmachinetaal wordt het echter iets ingewikkelder. Hoe je dit kunt doen, staat in dit artikelstap voor stap uitgelegd.

    JI ysticen

    eC-l.

    Het antwoord op deze vraag is eigenlijkniet eens zo ingewikkeld: je schrijft eengetal naar de toetsenbordkolommen enleest daarna de rijen uit. Dat doe je op devolgende manier:O Laad het A-register met het getal dat je

    naar de kolommen wilt schrijven, dit isvoor poort 1 het getal $FR en voor poort2 het getal $FD.Schrijf het getal naar de buffer van dekolommen, dit bleek na enig gezoek eenregister van de videochip (TED) te zijn,namelijk $FFO8.

    o Laad de waarde van de rijen in door dewaarde van $FFO8 (ja alweer) in te lezen.

    o Verwerk de waarde van de joystick in derest van je programma, hierover latermeer.

    Hier is een klein voorbeeldprogrammaatje,dat de waarde van de joystick op hetscherm print:

    ;de waarde van poort1 in het A-register.

    ;stuur de waarde uitnaar de buffer van dekolommen.

    .0663 LDX $FFO8 ;lees de waarde weerin.;zet $00 in het A-register.;print een getal dat inhet X- en het A-register staat als een decimaal getal op hetscherm (X= 10 byte,A= hi byte).;zet de ascii waardevan carriage return inhet A-register.;print de return.;spring naar het beginvan het programma.

    o o 0 0 0Fire Bit 0 Bit 3 Bit 2 Bit 1

    vuur: bit 6 (joystick in poort 1)bit 7 (joystick in poort 2).

    Als je het programma met G065E start,zie je een hele lijst van getallen op hetscherm verschijnen, die veranderen als jede joystick beweegt.De waarde van de joystick, die je dusinleest, is als volgt samengesteld:

    bitO

    bit 1

    Hierbij moet je er wel op letten dat als ereen schakelaartje op de joystick is ingedrukt, het betreffende bit een 0 is en geen1!Ook moet je in de gaten houden dat devuurknop van poort 1 en die van poort 2niet door hetzelfde bit vertegenwoordigdworden.

    Het volgende, wat langere programmaleest de waarde uit en print op het schermde richting van de stick:.1400 LDA# $93 ;chr$(147) in accu..1402 JSR $FFD2 ;print de chr$(147):

    dear screen..1405 LDA# $01 ;laad de kleur zwart in

    de accu..1407 LDX# $00 ;teller op nul..1409 STA $0800,X ;vul het geheugen met.140C STA $0900,X;.140E STA $OAOO,X;.1412 STA $OBOO,X;

    .1433 LDA $1300,X;

    .1436JSR$FFD2

    .14391NX

    .143A CPX# 805

    .143CBCC$1433

    .143E LDA# $OD

    zwart.

    ;verhoog teller.;teller < $FFm danbegin lus.;begin hoofdprogramma, laad accumet code voor poort1.;schrijf naar kolommen buffer.;lees rijen in.;zelfde als bij vorigescan?;ja, scan opnieuw.;nee, zet stick waardein $20.

    ;chr$(1 47) in accu.;print de chr$(1 47).;haal stick waarde op.;vuurknop ingedrukt?($80 voor poort 2).;nee, ga dan verdernaar $1 43E.;ja, print dan FIRE.

    lUS/

    e joystick bestaat uit vijf schakelaartjes, die aan de ene kant met de

    aarde (gnd) zijn verbonden en aan de andere kant aan de rijen van hettoetsenbord zijn geknoopt (zie fig.1). En schakelaartje is de vuurknop en de andere vier worden door de knuppel te bewegen al danniet ingedrukt. Hoe lees je dit nu uit in machinetaal?

    \

    ~~:r.4 ~

    \

    .065E LDA# SEA

    .0660 STA $FFO8

    bit 2

    .1415 INX

    .1416 BNE $1409

    .1418 LDA# $FA

    .141A STA $FFO8

    .141D LDA $FEO8

    .1420 CMP $20

    .1422 BEQ $1418

    .1424 STA $20

    .1426 LDA# $93

    .1428 JSR $FFD2

    .142B LDA $20

    .142D AND# $40

    .142E BNE $1 43E

    .1431 LDX# $00

    .0666 LDA# $00

    .0668 JSR $A45F

    .066B LDA# $OD

    .066D JSR $FFD2

    .0670 JMP 8065E

    bit 3

    ;ascii waarde van carriage return in accu.

    63

  • 0 5

    Voor particulieren, hobbyclubs, instellingen en han elarenNashua ,,white label 5,25 inch SSIDD Nashua 5,25 inch SS/DD Nashua 3,5 inch 1 D

    40-1 00 stuks 21,95 (per 10 st.) 40-1 00 stuks 29,90 30-1 00 stuks 75,00 (per 10 St.)110-500 stuks 19,95 (per 10 st.) 110-500 stuks 27,90 110-500 stuks 69,00 (per 10 st.)Nashua ,,white label 5,25 inch DS/DD R.P.S. ,,flexette 5,25 inch DS/DD Panasonic 3 inch40-100 stuks 23,95 (per 10 st.) 40-100 stuks 33,50 (per 10 st.) 30- 50 stuks 137,00

    110-500 stuks 21,95 (per 10 st.) 110-500 stuks 31,00 (per 10 st.) 60-1 00 stuks 135,00Bespaar 50%, maak van een enkele een dubbele diskette Diskette-knipper 12,90

    met de diskette knipper. Bij ons: f 12,90

    .1494 JSR $FFD2

    .1497 INX

    .1498 CPX# $05

    .149A BCC $1491

    .149C JMP $1418

    .149F LDA $20

    .14A1 AND# $OF

    .14A3 CMP# $OF

    .14A5 BNE $149C

    .14A7 LDX# $00

    .1440 JSR $FFD2 ;print de return(chr$(1 3)).

    .1443 LDA $020 ;haal stick waarde op.

    .1445 AND# $01 ;is bitO gezet (schakelaar dus niet ingedrukt)?

    .1447 BNE $1456 ;ja, dan verder naar$1456.

    .1449 LDX# $00 ;nee, print dan UP.

    .144B LDA $1305,X;

    .144EJSR$FFD2

    .1451 INX

    .1452 CPX# $02

    .1454 BCC $1448

    .1456 LDA $020 ;haal stick waarde op

    .1458 AND# $02 ;is biti gezet?

    .145A BNE $1469 ;ja, dan verder naar$1469.

    .145C LDX# $00 ;nee, print danDOWN.

    .145E LDA $1307,X;

    .1461 JSR$FFD2

    .1464 INX

    .1465 CPX# $04

    .1467 BCC $145E.

    .1469 LDA $020 ;haal stick waarde op.

    .1468 AND# $04 ;is bit2 gezet?

    .146D BNE $1484 ;ja, dan verder naar$1484.

    .146E LDA# $2D ;nee, print een - enLEFT.

    .1471 JSR $FFD2

    .1474 LDX# $00

    .1476 LDA $130B,X;

    .1479JSR$FFD2

    .147CINX

    .1470 CPX# $04

    .147E BCC $1 476

    .1481 JMP $1418 ;spring naar het beginvan het hoofdprogramma.

    .1484 LDA $20 ;haalstickwaardeop.

    .1486 AND# $08 ;is bit3 gezet?

    .1488 BNE $1 49F ;ja, dan verder naar$1 49F.

    .148A LDA# $2D ;nee, print dan een -en RIGHT.

    .148C JSR $FFD2

    .148F LDX# $00

    .1491 LDA$130F,X;

    ;spring naar het beginvan het hoofd programma.;haal stick waarde op.;is er een schakelaaringedrukt?

    ;ja, dan naar beginhoofd programma.;nee, print NOTHING.

    .14A9 LDA $1314,X;

    .14ACJSR$FFD2

    .14AFINX

    .14B0 CPX# $07

    .14B2BCC$14A9

    .1484 JMP $1418 ;spring naar begin.- -~ -~ - . :~ ~- - ~ .1~- -

    ~/ ~Ferg:e .etek niet~1300~4~.,~~-3084 57~4 4c:5:.~ ~WI~ILE R :~-~ .

    131049~7 48 ~ 4 5 ~ IG~TN1H -3 8 49 0 o~jO~o0 00 NG

    ~ :~, ~ ~- ~ ~:~- ~?

    Huib Maaskant.

    OPUS 4

    Voor d goedkoopste iskettes in de ~ eneluGRAMMOFOONPLATEN/COMPACTDISC/AUDIO- EN VIDEOCASSEflES/DISKE1TESDe Aarhof 42406 BT Alphen aan den RijnTel. 01720-75856Rabo: 30.16.21.276

    AFHALERS 10% korting.Alles inkl. BTW en VRACHT.

    100% ERROR FREE BEL NU 01 720-75856

    Voor UTRECHT en omstreken,,cassette en diskette specialistAnt. Matthaeuslaan 19~ 030-731826.,,OPUS 4 Aarhof 4 . 2406 BT ALPHEN AAN DEN RIJNTel. 01 720-75856

    64