mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +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:
parent
e035323ab4
commit
c9de0e6841
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -168,6 +168,8 @@ IRQStub:
|
||||
pha
|
||||
cld
|
||||
jsr callirq
|
||||
lda INTSET
|
||||
sta INTRST
|
||||
pla
|
||||
plx
|
||||
ply
|
||||
|
@ -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
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user