home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Input 64
/
Input_64_86-11_1986_Verlag_Heinz_Weise_de.d64
/
joytast.s
< prev
next >
Wrap
Text File
|
2023-02-26
|
4KB
|
183 lines
;***************************************
;* *
;* TASTATUR / JOYSTICKABFRAGE *
;* *
;* (w) 1986 by Martin Gebhardt *
;* *
;***************************************
;--------------------------------------
:strflg = $0d ;$ff: String
:intflg = $0e ;$80: Integer
:var = $49 ;Zeiger auf Variable
:fac = $61 ;Fliesskommaakku #1
:rpnt = $fb ;readpointer und
:wpnt = $fd ;writepointer fuer transfer
:cia1 = $dc00 ;CIA 1:
:pra = cia1+0 ; Port A
:prb = cia1+1 ; Port B
:ddra = cia1+2 ; Datenrichtung P.A
:ddrb = cia1+3 ; Datenrichtung P.B
:chrget = $0073
:chrgot = $0079
:error = $a43a ;Fehlermeldung ausgeben
:komma = $aefd ;prueft auf Komma
:getvar = $b08b ;holt Variablenadresse nach var
:setfac = $b3a2 ;y-Register nach fac
:getbyt = $b79b ;Bytewert nach x holen
:storefac = $bbd0 ;fac nach Variable schreiben
;--------------------------------------
;BASIC-Header
;------------
org $0801 ;org-basic
w zero3 ;link-pointer
w 1986 ;zeilen-no
b $9e ;sys-token
b "2127:"
b $8f ;rem-token
b $22 ;"
b "joytast (c) input 64 "
b "durch RUN programm nach 53000 kopieren!"
b $22 ;"
:zero3 b 0,0,0
;Verschiebe-Routine
;------------------
:begin lda #<code ;low- und
ldy #>code ;high-adress
sta rpnt ;von quelle
sty rpnt+1 ;uebergeben
lda #<start
ldy #>start ;dito
sta wpnt ;fuer
sty wpnt+1 ;ziel
ldx #blocks ;blockanzahl laden
ldy #00 ;clr byte-counter
:trlop lda (rpnt),y ;load and
sta (wpnt),y ;store bytes
iny ;bis zum
bne trlop ;page-ende
inc rpnt+1 ;zeiger-high
inc wpnt+1 ;erhoehen
dex ;evtl.
bne trlop ;naechste page
rts ;zum BASIC
:code = *
;Programmstart
;-------------
org 53000
:start jsr komma
jsr getvar
sta var
sty var+1
lda strflg
ora intflg
beq weiter
ldx #22 ;TYPE MISMATCH
jmp error ;ERROR
:weiter jsr chrgot ;letztes Zeichen
cmp #$2c ;Komma?
bne warten ;==>kein Flag
jsr getbyt
cpx #0 ;oder Flag =0:
beq warten ;==> warten
;nicht warten
;------------
jsr tast ;Code in y
:fertig jsr setfac
jsr storefac ;in Variable schreiben
rts ;ENDE
;warten, bis Taste gedrueckt
;---------------------------
:warten jsr tast
cpy #1
beq warten
jmp fertig
;Tastaturabfrage
;---------------
:tast php ;status retten
sei ;interrupt sperren
lda ddra ;Datenrichtung retten
pha
lda ddrb
pha
lda #$ff ;und neu setzen
sta ddra
lda #$00
sta ddrb
;
ldx #$7f ;fuer Stop-Abfrage ermoeglichen
ldy #5
:loop dey
bmi raus ;keine Taste ==>raus
inc ddra
lda pra ;Joystick ?
dec ddra
cmp tabj,y
beq raus ;ja, dann raus
lda taba,y ;Zeile fuer Abfrage
sta pra
lda prb ;Taste?
stx pra
cmp tabb,y ;vergleichen
bne loop ;nicht gleich, dann loop
;
:raus pla ;Datenrichtung rekonstruieren
sta ddrb
pla
sta ddra
iny
iny
plp
rts ;Tastaturcode wird
;in y uebergeben
;keine Taste: 1
;tabellen fuer abfrage
:tabj ;Joystick
b %11111110 ;oben
b %11111101 ;unten
b %11110111 ;rechts
b %11111011 ;links
b %11101111 ;feuer
:taba ;Tastatur, Zeilen
b %11111101 ;a
b %11111101 ;z
b %10111111 ;/
b %11011111 ;.
b %01111111 ;space
:tabb ;Tastatur, Spalten
b %11111011 ;siehe oben
b %11101111
b %01111111
b %11101111
b %11101111
;--------------------------------------
:cdend = *-start
:blocks := >cdend
:low = <cdend-code
if low > 0
:blocks := blocks+1