Lynx TGI driver update by Karri Kaksonen. Adds collision detection.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4393 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
f24adadb9c
commit
33af076cfc
3 changed files with 38 additions and 2 deletions
|
@ -46,7 +46,7 @@ that shows how to create a complete bootable Lynx cart.
|
|||
<sect>Memory layout<p>
|
||||
|
||||
cc65 generated programs with the default setup run with the I/O area and the
|
||||
kernal enabled, which gives a usable memory range of $400 - $C038.
|
||||
kernal enabled, which gives a usable memory range of $400 - $C037.
|
||||
|
||||
Special locations:
|
||||
|
||||
|
@ -62,12 +62,17 @@ Special locations:
|
|||
'?' for all keys down at the same time.
|
||||
|
||||
<tag/Stack/
|
||||
The C runtime stack is located at $C037 and growing downwards.
|
||||
The C runtime stack is located at $C037 (or $A057 if collision
|
||||
detection is enabled) and growing downwards.
|
||||
|
||||
<tag/Heap/
|
||||
The C heap is located at the end of the program and grows towards the C
|
||||
runtime stack.
|
||||
|
||||
<tag/Screen/
|
||||
The collision detection screen is at $A058 if it is enabled. The
|
||||
double buffered screens are at $C038 and $E018.
|
||||
|
||||
</descrip><p>
|
||||
|
||||
|
||||
|
@ -145,6 +150,10 @@ To update displays you can call tgi_updatedisplay() or tgi_ioctl(4, 1) it
|
|||
will wait for the next VBL interrupt and set the draw buffer to the
|
||||
view buffer. The draw buffer is also changed to (drawbuffer xor 1).
|
||||
|
||||
You can also enable or disable collision detection by a call to
|
||||
tgi_setcollisiondetection(active) or tgi_ioctl(5, active). The collision
|
||||
result is located before the sprite structure by default in this driver.
|
||||
|
||||
<sect1>Extended memory drivers<p>
|
||||
|
||||
No extended memory drivers are currently available for the Lynx.
|
||||
|
|
|
@ -109,6 +109,7 @@ void __fastcall__ lynx_eeprom_erase (unsigned char cell);
|
|||
#define tgi_setframerate(rate) tgi_ioctl(3, (unsigned)(rate))
|
||||
#define tgi_busy() tgi_ioctl(4, 0)
|
||||
#define tgi_updatedisplay() tgi_ioctl(4, 1)
|
||||
#define tgi_setcollisiondetection(active) tgi_ioctl(5, (unsigned)(active))
|
||||
|
||||
/* End of lynx.h */
|
||||
#endif
|
||||
|
|
|
@ -199,6 +199,16 @@ INIT:
|
|||
; Enable interrupts for VBL
|
||||
lda #$80
|
||||
tsb VTIMCTLA
|
||||
; Set up collision buffer to $A058
|
||||
lda #$58
|
||||
sta COLLBASL
|
||||
lda #$A0
|
||||
sta COLLBASH
|
||||
; Put collision index before sprite data
|
||||
lda #$FE
|
||||
sta COLLOFFL
|
||||
lda #$FF
|
||||
sta COLLOFFH
|
||||
; Done, reset the error code
|
||||
lda #TGI_ERR_OK
|
||||
sta ERROR
|
||||
|
@ -245,6 +255,8 @@ GETERROR:
|
|||
;
|
||||
; To update displays you can call tgi_ioctl(4, 1) it will wait for the
|
||||
; next VBL interrupt and swap draw and view buffers.
|
||||
;
|
||||
; Activate or deactivate collision detection by calling tgi_ioctl(5, 0/1).
|
||||
|
||||
CONTROL:
|
||||
pha ; Almost all control routines succeed
|
||||
|
@ -252,6 +264,20 @@ CONTROL:
|
|||
sta ERROR
|
||||
pla
|
||||
|
||||
cmp #5
|
||||
bne ControlSwap
|
||||
lda ptr1
|
||||
bne @L0
|
||||
lda __sprsys
|
||||
ora #$20
|
||||
bra @L1
|
||||
@L0: lda __sprsys
|
||||
and #$df
|
||||
@L1: sta __sprsys
|
||||
sta SPRSYS
|
||||
rts
|
||||
|
||||
ControlSwap:
|
||||
cmp #4
|
||||
bne ControlFramerate
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue