1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-22 12:30:41 +00:00

Lynx changes by Karri Kaksonen.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4164 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2009-09-13 13:37:44 +00:00
parent e035323ab4
commit c9de0e6841
4 changed files with 58 additions and 13 deletions

View File

@ -125,14 +125,29 @@ single-buffer device set draw page and view page to the same value 0 or 1;
The TGI driver has a few Lynx-specific extensions.
Calling tgi_ioctl(0, spr) will display a standard Lynx sprite on screen.
Calling tgi_sprite(spr) or tgi_ioctl(0, spr) will display a standard Lynx
sprite on screen.
Calling tgi_ioctl(1, 0) will do a flip screen. If you decide to flip the
screen then it may be a good idea to call the install-routine for the
joystick to get that flipped too.
Calling tgi_flip() or tgi_ioctl(1, 0) will do a flip screen.
Calling tgi_ioctl(2, bgindex) will set the text background color to the index
defined by bgindex. If bgindex is 0 then the background color is transparent.
Calling tgi_setbgcolor(bgcolor) or tgi_ioctl(2, bgindex) will set the text
background color to the index defined by bgindex. If bgindex is 0 then the
background color is transparent.
To set the framerate of the display hardware call tgi_setframerate(rate) or
tgi_ioctl(3, rate). The supported framerates are 50, 60 and 75 frames per
second. Actually there is no real reason to use anything else than 75 frames
per second.
To check if the drawing engine is busy with the previous swap you can
call tgi_busy or tgi_ioctl(4, 0). It returns 0 if idle and 1 if busy
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).
Set an address for a subroutine you want to call at every VBL by calling
tgi_setvblhook(addr) or tgi_ioctl(5, addr).
<sect1>Extended memory drivers<p>

View File

@ -100,6 +100,33 @@ void __fastcall__ lynx_eeprom_erase (unsigned char cell);
/*****************************************************************************/
/* TGI extras */
/*****************************************************************************/
#define tgi_sprite(spr) tgi_ioctl(0, (unsigned)(spr))
#define tgi_flip() tgi_ioctl(1, 0)
#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (unsigned)(bgcol))
#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_setvblhook(addr) tgi_ioctl(5, (unsigned)(addr))
/*****************************************************************************/
/* TGI extras */
/*****************************************************************************/
#define tgi_sprite(spr) tgi_ioctl(0, (unsigned)(spr))
#define tgi_flip() tgi_ioctl(1, 0)
#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (unsigned)(bgcol))
#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_setvblhook(addr) tgi_ioctl(5, (unsigned)(addr))
/* End of lynx.h */
#endif

View File

@ -168,6 +168,8 @@ IRQStub:
pha
cld
jsr callirq
lda INTSET
sta INTRST
pla
plx
ply

View File

@ -240,10 +240,11 @@ GETERROR:
;
; To set the frame rate for the display hardware call tgi_ioctl(3, rate)
;
; To make a request for swapping the display buffers call tgi_ioctl(4, dataptr)
; If the value of the char pointed to by the dataptr is 0 then fill in the
; value of the char with the current state of the swap buffer 0 = idle, 1 = busy
; If the value is not 0 then activate the swap function at next VBL interrupt
; To check if the drawing engine is busy with the previous swap you can
; call tgi_ioctl(4, 0). It returns 0 if idle and 1 if busy
;
; To update displays you can call tgi_ioctl(4, 1) it will wait for the
; next VBL interrupt and swap draw and view buffers.
;
; Set an address for a subroutine you want to call at every VBL
; tgi_ioctl(5, hook)
@ -468,9 +469,9 @@ IRQ:
bne IRQVBL
clc ; Not a VBL interrupt - exit
rts
IRQVBL: sta INTRST ; Clear interrupt
IRQVBL:
lda SWAPREQUEST
bne @L0
beq @L0
lda DRAWPAGE
jsr SETVIEWPAGE
lda DRAWPAGE
@ -480,7 +481,7 @@ IRQVBL: sta INTRST ; Clear interrupt
stz SWAPREQUEST
@L0:
jsr VBLHOOK
sec
clc
rts
; ------------------------------------------------------------------------