home *** CD-ROM | disk | FTP | other *** search
/ Input 64 / Input_64_86-11_1986_Verlag_Heinz_Weise_de.d64 / joytast.s < prev    next >
Text File  |  2023-02-26  |  4KB  |  183 lines

  1. ;***************************************
  2. ;*                                     *
  3. ;*   TASTATUR / JOYSTICKABFRAGE        *
  4. ;*                                     *
  5. ;*     (w) 1986 by Martin Gebhardt     *
  6. ;*                                     *
  7. ;***************************************
  8.  
  9. ;--------------------------------------
  10. :strflg   = $0d  ;$ff: String
  11. :intflg   = $0e  ;$80: Integer
  12. :var      = $49  ;Zeiger auf Variable
  13. :fac      = $61  ;Fliesskommaakku #1
  14. :rpnt     = $fb  ;readpointer und
  15. :wpnt     = $fd  ;writepointer fuer transfer
  16.  
  17.  
  18. :cia1     = $dc00   ;CIA 1:
  19. :pra      = cia1+0  ; Port A
  20. :prb      = cia1+1  ; Port B
  21. :ddra     = cia1+2  ; Datenrichtung P.A
  22. :ddrb     = cia1+3  ; Datenrichtung P.B
  23.  
  24. :chrget   = $0073
  25. :chrgot   = $0079
  26. :error    = $a43a ;Fehlermeldung ausgeben
  27. :komma    = $aefd ;prueft auf Komma
  28. :getvar   = $b08b ;holt Variablenadresse nach var
  29. :setfac   = $b3a2 ;y-Register nach fac
  30. :getbyt   = $b79b ;Bytewert nach x holen
  31. :storefac = $bbd0 ;fac nach Variable schreiben
  32.  
  33. ;--------------------------------------
  34.          ;BASIC-Header
  35.          ;------------
  36. org $0801 ;org-basic
  37.  
  38. w zero3  ;link-pointer
  39. w 1986   ;zeilen-no
  40. b $9e    ;sys-token
  41. b "2127:"
  42. b $8f    ;rem-token
  43. b $22    ;"
  44. b "joytast (c) input 64   "
  45. b "durch RUN programm nach 53000 kopieren!"
  46. b $22    ;"
  47. :zero3 b 0,0,0
  48.  
  49.          ;Verschiebe-Routine
  50.          ;------------------
  51. :begin    lda #<code   ;low- und
  52.           ldy #>code   ;high-adress
  53.           sta rpnt     ;von quelle
  54.           sty rpnt+1   ;uebergeben
  55.           lda #<start
  56.           ldy #>start  ;dito
  57.           sta wpnt     ;fuer
  58.           sty wpnt+1   ;ziel
  59.           ldx #blocks  ;blockanzahl laden
  60.           ldy #00      ;clr byte-counter
  61. :trlop    lda (rpnt),y ;load and
  62.           sta (wpnt),y ;store bytes
  63.           iny          ;bis zum
  64.           bne trlop    ;page-ende
  65.           inc rpnt+1   ;zeiger-high
  66.           inc wpnt+1   ;erhoehen
  67.           dex          ;evtl.
  68.           bne trlop    ;naechste page
  69.           rts          ;zum BASIC
  70.  
  71.  
  72. :code = *
  73.          ;Programmstart
  74.          ;-------------
  75. org 53000
  76. :start    jsr komma
  77.           jsr getvar
  78.           sta var
  79.           sty var+1
  80.           lda strflg
  81.           ora intflg
  82.           beq weiter
  83.           ldx #22    ;TYPE MISMATCH
  84.           jmp error  ;ERROR
  85. :weiter   jsr chrgot ;letztes Zeichen
  86.           cmp #$2c   ;Komma?
  87.           bne warten ;==>kein Flag
  88.           jsr getbyt
  89.           cpx #0     ;oder Flag =0:
  90.           beq warten ;==> warten
  91.  
  92.          ;nicht warten
  93.          ;------------
  94.           jsr tast   ;Code in y
  95. :fertig   jsr setfac
  96.           jsr storefac ;in Variable schreiben
  97.           rts        ;ENDE
  98.  
  99.          ;warten, bis Taste gedrueckt
  100.          ;---------------------------
  101. :warten   jsr tast
  102.           cpy #1
  103.           beq warten
  104.           jmp fertig
  105.  
  106.          ;Tastaturabfrage
  107.          ;---------------
  108. :tast     php        ;status retten
  109.           sei        ;interrupt sperren
  110.           lda ddra   ;Datenrichtung retten
  111.           pha
  112.           lda ddrb
  113.           pha
  114.           lda #$ff   ;und neu setzen
  115.           sta ddra
  116.           lda #$00
  117.           sta ddrb
  118.           ;
  119.           ldx #$7f   ;fuer Stop-Abfrage ermoeglichen
  120.           ldy #5
  121. :loop     dey
  122.           bmi raus   ;keine Taste ==>raus
  123.  
  124.           inc ddra
  125.           lda pra    ;Joystick ?
  126.           dec ddra
  127.           cmp tabj,y
  128.           beq raus   ;ja, dann raus
  129.  
  130.           lda taba,y ;Zeile fuer Abfrage
  131.           sta pra
  132.           lda prb    ;Taste?
  133.           stx pra
  134.           cmp tabb,y ;vergleichen
  135.           bne loop   ;nicht gleich, dann loop
  136.  
  137.           ;
  138. :raus     pla        ;Datenrichtung rekonstruieren
  139.           sta ddrb
  140.           pla
  141.           sta ddra
  142.           iny
  143.           iny
  144.           plp
  145.           rts        ;Tastaturcode wird
  146.                      ;in y uebergeben
  147.                      ;keine Taste: 1
  148.  
  149. ;tabellen fuer abfrage
  150.  
  151. :tabj                ;Joystick
  152.         b %11111110  ;oben
  153.         b %11111101  ;unten
  154.         b %11110111  ;rechts
  155.         b %11111011  ;links
  156.         b %11101111  ;feuer
  157.  
  158. :taba                ;Tastatur, Zeilen
  159.         b %11111101  ;a
  160.         b %11111101  ;z
  161.         b %10111111  ;/
  162.         b %11011111  ;.
  163.         b %01111111  ;space
  164.  
  165. :tabb                ;Tastatur, Spalten
  166.         b %11111011  ;siehe oben
  167.         b %11101111
  168.         b %01111111
  169.         b %11101111
  170.         b %11101111
  171. ;--------------------------------------
  172. :cdend = *-start
  173. :blocks := >cdend
  174. :low = <cdend-code
  175. if low > 0
  176. :blocks := blocks+1
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.