1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-10 19:29:45 +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. 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 Calling tgi_flip() or tgi_ioctl(1, 0) will do a flip screen.
screen then it may be a good idea to call the install-routine for the
joystick to get that flipped too.
Calling tgi_ioctl(2, bgindex) will set the text background color to the index Calling tgi_setbgcolor(bgcolor) or tgi_ioctl(2, bgindex) will set the text
defined by bgindex. If bgindex is 0 then the background color is transparent. 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> <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 */ /* End of lynx.h */
#endif #endif

View File

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

View File

@ -240,10 +240,11 @@ GETERROR:
; ;
; To set the frame rate for the display hardware call tgi_ioctl(3, rate) ; 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) ; To check if the drawing engine is busy with the previous swap you can
; If the value of the char pointed to by the dataptr is 0 then fill in the ; call tgi_ioctl(4, 0). It returns 0 if idle and 1 if busy
; 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 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 ; Set an address for a subroutine you want to call at every VBL
; tgi_ioctl(5, hook) ; tgi_ioctl(5, hook)
@ -468,9 +469,9 @@ IRQ:
bne IRQVBL bne IRQVBL
clc ; Not a VBL interrupt - exit clc ; Not a VBL interrupt - exit
rts rts
IRQVBL: sta INTRST ; Clear interrupt IRQVBL:
lda SWAPREQUEST lda SWAPREQUEST
bne @L0 beq @L0
lda DRAWPAGE lda DRAWPAGE
jsr SETVIEWPAGE jsr SETVIEWPAGE
lda DRAWPAGE lda DRAWPAGE
@ -480,7 +481,7 @@ IRQVBL: sta INTRST ; Clear interrupt
stz SWAPREQUEST stz SWAPREQUEST
@L0: @L0:
jsr VBLHOOK jsr VBLHOOK
sec clc
rts rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------