Mercurial > hg > Members > kono > nitros9-code
view 3rdparty/subrtns/hires.asm @ 3204:64ad5cd0b912
Added some HD6309 optimizations to level1's covdg.asm file.
Optimization 1) added TFM clear screen
Optimization 2) added TFM scroll screen
One of the optimizations was copied over from the level2's covdg.asm file.
author | David Ladd <drencor-xeen@users.sourceforge.net> |
---|---|
date | Fri, 28 Jul 2017 15:42:20 -0500 |
parents | b8c7b7fbf3c9 |
children |
line wrap: on
line source
******************************************************************** * HiRes - HiRes Joystick Subroutine Module * * $Id$ * * Ed. Comments Who YY/MM/DD * ------------------------------------------------------------------ * 1 Created for Coyota project BGP 98/??/?? nam HiRes ttl HiRes Joystick Subroutine Module ifp1 use defsfile endc edition set 1 mod eom,name,Sbrtn+Objct,Reent+0,HiRes,size size equ . name fcs /HiRes/ fcb edition * 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 94 POLLDLY equ 809 HIVAL equ 640 ELSE SETTLDLY equ 94*2 POLLDLY equ 404 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