diff 3rdparty/subrtns/hires.asm @ 0:6641a883d6b0

Initial revision
author boisy
date Thu, 04 Apr 2002 16:34:12 +0000
parents
children 900ceed1880a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/3rdparty/subrtns/hires.asm	Thu Apr 04 16:34:12 2002 +0000
@@ -0,0 +1,153 @@
+Level    equ   2
+
+         ifp1  
+         use   os9defs
+         endc  
+
+         mod   eom,name,Sbrtn+Objct,Reent+0,HiRes,size
+
+size     equ   .
+
+name     fcs   /HiRes/
+         fcb   $01
+
+* Hi-Res Read Routine
+*
+* Taken in part from "High Hopes for the Hi-Res"
+* by William Barden, Jr., Rainbow Magazine, Feb 1990, pp. 42
+*
+* Entry:
+*   X  = $0000 for Right, $0001 for Left
+*
+* Exit:
+*   2,s = param count (should be 4)
+*   4,s = addr of 1st param            (joystick number)
+*   6,s = size of 1st param
+*   8,s = addr of 2nd param            (joystick X)
+*  10,s = size of 2nd param
+*  12,s = addr of 3rd param            (joystick Y)
+*  14,s = size of 3rd param
+*  16,s = addr of 4th param            (joystick button)
+*  18,s = size of 4th param
+
+
+HiRes    ldd   2,s        get param count
+         cmpd  #4         4 params?
+         bne   error
+         ldd   [4,s]      get joystick num.
+* fix up joystick value
+         lslb             shift left 3 times
+         lslb  
+         lslb  
+         pshs  b
+         lda   #$00       fetch X value
+         bsr   HiResHW
+         std   [9,s]      save in param addr
+         lda   #$08       fetch Y value
+         ldb   ,s+        get joystick selector
+         bsr   HiResHW
+         std   [12,s]
+* get button value
+         clra  
+         ldb   #$FF
+         stb   $FF02
+         ldb   $FF00
+         clr   $FF02
+         comb  
+         tst   [5,s]
+         beq   BtnLft
+         andb  #$05
+         bra   BtnCnt
+BtnLft   andb  #$0A
+         lsrb  
+BtnCnt   lsrb  
+         bcc   BtnCnt2
+         orb   #$01
+BtnCnt2  std   [16,s]     save button
+         clrb             no error
+         rts   
+error    coma  
+         ldb   #E$IllArg
+         rts   
+
+
+* Hi-Res Hardware read routine
+*
+* This code is a hybrid of William Barden's Hi-Res
+* interface code in the February 1990 Rainbow, and
+* the code in CC3IO.  It prevents infinite looping
+* that can happen in Barden's code.  It also caps the
+* value at 639.
+*
+* Entry:
+*   A  = value to place in $FF01 (00 for X, 08 for Y)
+*   B  = value to place in $FF03 (00 for Right, 08 for Left)
+*
+* Exit:
+*   D  = value
+
+* Delays for CoCo 3 OS-9 Level Two vs. CoCo 2 OS-9 Level One
+         ifgt  Level-1
+SETTLDLY equ   $5E
+POLLDLY  equ   $0329
+HIVAL    equ   640
+         else  
+SETTLDLY equ   $5E*2
+POLLDLY  equ   $0194
+HIVAL    equ   320
+         endc  
+
+HiResHW  pshs  a
+         lda   $FF01
+         anda  #$F7
+         ora   ,s+
+         sta   $FF01      select X or Y
+
+         pshs  b
+         lda   $FF03
+         anda  #$F7
+         ora   ,s+
+         sta   $FF03      select Right or Left
+
+* turn off ramp
+         lda   $FF20
+         anda  #$03
+         ora   #$FC
+         sta   $FF20      turn off ramp
+
+* delay for settling
+         ldb   #SETTLDLY  delay loop
+Settle   decb  
+         bne   Settle
+
+         ldd   #POLLDLY
+         pshs  a
+         lda   $FF20
+         anda  #$23
+         sta   $FF20      turn on ramp
+RampCnt  lda   $FF00      get byte at $FF00
+         bmi   CompVal    branch if voltage hit
+         decb             B initially $29
+         bne   RampCnt
+         dec   ,s         ,S initially $03
+         bpl   RampCnt
+         puls  a
+         ldd   #HIVAL-1   just assume highest
+         rts   
+CompVal  puls  a
+         decb  
+         pshs  b,a        push hi-res count
+         ldd   #HIVAL
+         subd  ,s++       subtract count from 640
+         bcc   CompVal2
+         clra  
+         clrb  
+         rts   
+CompVal2 cmpd  #HIVAL-1
+         bcs   HiHWRts
+         ldd   #HIVAL-1
+HiHWRts  rts   
+
+         emod  
+eom      equ   *
+         end