ASM tool for BASIC programmers
Moderator: MaxCoderz Staff
- dysfunction
- Calc Master
- Posts: 1454
- Joined: Wed 22 Dec, 2004 3:07 am
- Location: Through the Aura
-
- Calc Master
- Posts: 1089
- Joined: Fri 17 Dec, 2004 9:53 am
lol
Yea, but i dont think anyone'll use it, but if someone would need it, they could ask me to put it in
-
- Calc Wizard
- Posts: 526
- Joined: Tue 08 Mar, 2005 1:37 am
- Location: who wants to know?
- Contact:
-
- Calc Wizard
- Posts: 526
- Joined: Tue 08 Mar, 2005 1:37 am
- Location: who wants to know?
- Contact:
-
- Calc Master
- Posts: 1089
- Joined: Fri 17 Dec, 2004 9:53 am
*sigh*
I'll just post source of DI routine here, so you guys can see how i did it. I havent fully tested it yet, but it should work.
Code: Select all
directinput:
ld a,191 ; a = 191
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
cp 223 ; if a = 223
jp z,ansispressed ; jump to ansispressed
ld a,223 ; a = 223
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
cp 127 ; if a = 127
jp z,alphaispressed ; jump to alphaispressed
ld a,253 ; a = 253
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
ld b,a ; b = a
cp 254 ; if a = 254
jp z,enterispressed ; jump to enterispressed
ld a,b ; a = b
cp 191 ; if a = 191
jp z,clearispressed ; jump to clearispressed
ld a,254 ; a = 254
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
ld b,a ; b = a
cp 254 ; if a = 254
jp z,downispressed ; jump to downispressed
ld a,b ; a = b
cp 253 ; if a = 253
jp z,leftispressed ; jump to leftispressed
ld a,b ; a = b
cp 251 ; if a = 251
jp z,rightispressed ; jump to rightispressed
ld a,b ; a = b
cp 247 ; if a = 247
jp z,upispressed ; jump to upispressed
ld a,b ; a = b
cp 245 ; if a = 245
jp z,upandleftarepressed ; jump to upandleftarepressed
ld a,b ; a = b
cp 243 ; if a = 243
jp z,upandrightarepressed ; jump to upandrightarepressed
ld a,b ; a = b
cp 252 ; if a = 252
jp z,downandleftarepressed ; jump to downandleftarepressed
ld a,b ; a = b
cp 250 ; if a = 250
jp z,downandrightarepressed ; jump to downandrightarepressed
xor a ; a = 0
bcall(_setxxop1) ; OP1 = a
bcall(_stoans) ; Ans = OP1
ret ; end
ansispressed:
ld a,21 ; a = 21
jp keyispressed ; jump to keyispressed
alphaispressed:
ld a,31 ; a = 31
jp keyispressed ; jump to keyispressed
enterispressed:
ld a,105 ; a = 105
jp keyispressed ; jump to keyispressed
clearispressed:
ld a,45 ; a = 45
jp keyispressed ; jump to keyispressed
downispressed:
ld a,34 ; a = 34
jp keyispressed ; jump to keyispressed
leftispressed:
ld a,24 ; a = 24
jp keyispressed ; jump to keyispressed
rightispressed:
ld a,25 ; a = 25
jp keyispressed ; jump to keyispressed
upispressed:
ld a,26 ; a = 26
jp keyispressed ; jump to keyispressed
downandleftarepressed:
ld a,49 ; a = 49
jp keyispressed ; jump to keyispressed
downandrightarepressed:
ld a,51 ; a = 51
jp keyispressed ; jump to keyispressed
upandleftarepressed:
ld a,58 ; a = 58
jp keyispressed ; jump to keyispressed
upandrightarepressed:
ld a,60 ; a = 60
keyispressed:
bcall(_setxxop1) ; OP1 = a
bcall(_stoans) ; Ans = OP1
ret ; end
- Jim e
- Calc King
- Posts: 2457
- Joined: Sun 26 Dec, 2004 5:27 am
- Location: SXIOPO = Infinite lives for both players
- Contact:
You can use a table for that, here this is kinda off the top of my head.
I really don't know if that will work I just made it up.
But It will test all the keys, add you can add special code to make it detect multiple key presses.
I'm gonna use it for my own basic lib. :p
Code: Select all
gsGetcsc:
ld c,$01 ;key port
ld de,$FFFE ;d=reset e=key group
out (c),d ;reset key
ld l,0 ;l holds key pressed
cscloop:
out (c),e ;set keygroup
ld b,8 ;loop, Delay needed when work with key driver
in a,(c) ;read key
cscbit:
inc l ;inc to get key pressed
rra ; if key pressed done
jr nc,donecsc
djnz cscbit ;loop 8
out (c),d ;reset key
rlc e ;next key group
bit 7,e
jp nz,cscloop ;if bit 7 set loop
ld l,0 ;if no key pressed 0
donecsc:
ld h,0
ld bc,keys
add hl,bc
ld a,(hl)
ld l,a
ld h,0
bcall(__SetXXXXOP2)
bcall(_OP2ToOP1)
bcall(_stoans)
ret
Keys:
.db 0
.db 034, 24, 26, 25, 00, 00, 00, 00
.db 105, 95, 85, 75, 65, 55, 45, 00
.db 104, 94, 84, 74, 64, 54, 44, 00
.db 103, 93, 83, 73, 63, 53, 43, 33
.db 102, 92, 82, 72, 62, 52, 42, 32
.db 000, 91, 81, 71, 61, 51, 41, 31
.db 011, 12, 13, 14, 15, 21, 22, 23
But It will test all the keys, add you can add special code to make it detect multiple key presses.
I'm gonna use it for my own basic lib. :p
-
- Calc Master
- Posts: 1089
- Joined: Fri 17 Dec, 2004 9:53 am
uuh
Nah, its fine, the old code was buggy, so i have new code now. This code contains 1 more bug: when i press enter, instead of 105 it gives 5
Code: Select all
directinput:
ld a,191 ; a = 191
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
cp 223 ; if a = 223
jp z,ansispressed ; jump to ansispressed
ld a,223 ; a = 223
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
cp 127 ; if a = 127
jp z,alphaispressed ; jump to alphaispressed
ld a,253 ; a = 253
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
ld b,a ; b = a
cp 254 ; if a = 254
jp z,enterispressed ; jump to enterispressed
ld a,b ; a = b
cp 191 ; if a = 191
jp z,clearispressed ; jump to clearispressed
ld a,254 ; a = 254
out (1),a ; loads a into key port
in a,(1) ; loads key port value into a
ld b,a ; b = a
cp 254 ; if a = 254
jp z,downispressed ; jump to downispressed
ld a,b ; a = b
cp 253 ; if a = 253
jp z,leftispressed ; jump to leftispressed
ld a,b ; a = b
cp 251 ; if a = 251
jp z,rightispressed ; jump to rightispressed
ld a,b ; a = b
cp 247 ; if a = 247
jp z,upispressed ; jump to upispressed
ld a,b ; a = b
cp 245 ; if a = 245
jp z,upandleftarepressed ; jump to upandleftarepressed
ld a,b ; a = b
cp 243 ; if a = 243
jp z,upandrightarepressed ; jump to upandrightarepressed
ld a,b ; a = b
cp 252 ; if a = 252
jp z,downandleftarepressed ; jump to downandleftarepressed
ld a,b ; a = b
cp 250 ; if a = 250
jp z,downandrightarepressed ; jump to downandrightarepressed
xor a ; a = 0
bcall(_setxxop1) ; OP1 = a
bcall(_stoans) ; Ans = OP1
ret ; end
ansispressed:
ld a,21 ; a = 21
jp keyispressed ; jump to keyispressed
alphaispressed:
ld a,31 ; a = 31
jp keyispressed ; jump to keyispressed
enterispressed:
ld a,105 ; a = 105
jp keyispressed ; jump to keyispressed
clearispressed:
ld a,45 ; a = 45
jp keyispressed ; jump to keyispressed
downispressed:
ld a,34 ; a = 34
jp keyispressed ; jump to keyispressed
leftispressed:
ld a,24 ; a = 24
jp keyispressed ; jump to keyispressed
rightispressed:
ld a,26 ; a = 26
jp keyispressed ; jump to keyispressed
upispressed:
ld a,25 ; a = 25
jp keyispressed ; jump to keyispressed
downandleftarepressed:
ld a,58 ; a = 58
jp keyispressed ; jump to keyispressed
downandrightarepressed:
ld a,60 ; a = 60
jp keyispressed ; jump to keyispressed
upandleftarepressed:
ld a,49 ; a = 49
jp keyispressed ; jump to keyispressed
upandrightarepressed:
ld a,51 ; a = 51
keyispressed:
bcall(_setxxop1) ; OP1 = a
bcall(_stoans) ; Ans = OP1
ret ; end
- Jim e
- Calc King
- Posts: 2457
- Joined: Sun 26 Dec, 2004 5:27 am
- Location: SXIOPO = Infinite lives for both players
- Contact:
_setxxop1 can only go up to 99, do this instead.
that shows everthing.
Code: Select all
ld l,a
ld h,0
bcall(__SetXXXXOP2)
bcall(_OP2ToOP1)
that shows everthing.
-
- Calc Master
- Posts: 1089
- Joined: Fri 17 Dec, 2004 9:53 am
thx
Thx man! It works perfect now! It's at v. 0.0.7 atm, have to make 1 routine yet (but i need xlib source for it) and then i'll release v. 0.1!
-
- Calc Master
- Posts: 1089
- Joined: Fri 17 Dec, 2004 9:53 am
:p
No, i can do it myself, i just need xlib source to see how to do some stuff, and else it'll be easy.