1
0
mirror of https://github.com/cc65/cc65.git synced 2025-02-09 02:30:42 +00:00

Now setPixel works in TGI.

This commit is contained in:
jede 2017-10-20 21:03:30 +02:00
parent f964fdbe56
commit 351a5ab20a
4 changed files with 155 additions and 10 deletions

View File

@ -54,11 +54,43 @@ HRS3 := $51
HRS4 := $53 HRS4 := $53
HRS5 := $55 HRS5 := $55
HRSFB := $57
; RS232T
; b0-b3 : speed
; 1111 => 19200 bps (please note that telestrat can't handle this speed with stopping all IRQ except ACIA's one)
; 1100 => 9600 bps (default from telemon)
; 1110 => 4800 bps
; 1010 => 2400 bps
; 1000 => 1200 bps
; 0111 => 600 bps
; 0110 => 300 bps
; 0101 => 150 bps
; 0010 => 75 bps
; b4 : 0 external clock, 1 internal clock
; b6-b5 : 00 8 bits
; 01 7 bits
; 10 6 bits
; 11 5 bits
; b7 : 0 a stop
RS232T := $59
; RS232C
; b0-b3 : 0
; b4 : 1 if echo
; b5 : 1 if parity
; b7-b6 : 00 in/out parity odd
; : 01 on/out parity even
; : 10 parity sent, answer not tested
; : 11 SPACE SENT, reception not tested
RS232C := $5A
; --------------------------------------------------------------------------- ; ---------------------------------------------------------------------------
; Low memory ; Low memory
IRQVec := $02fb ; "fast" interrupt vector IRQVec := $02FB ; "fast" interrupt vector
@ -84,7 +116,7 @@ PRA2 .byte ; Port Register A without handshaking
.endstruct .endstruct
.struct VIA2 ; Versatile Interface Adapter .struct VIA2 ; Versatile Interface Adapter
.res $0320 .res $0320
PRB .byte ; Port Register B PRB .byte ; Port Register B
PRA .byte ; Port Register A PRA .byte ; Port Register A
@ -116,7 +148,7 @@ SCREEN := $BB80
; --------------------------------------------------------------------------- ; ---------------------------------------------------------------------------
; ROM entries ; ROM entries
; primitives telemon 2.4 ; telemon primitives (2.4 & 3.x)
XRD0 = $08 XRD0 = $08
XRDW0 = $0C XRDW0 = $0C
XWR0 = $10 XWR0 = $10
@ -140,10 +172,19 @@ XMUSIC = $45
XZAP = $46 XZAP = $46
XSHOOT = $47 XSHOOT = $47
XSOUT = $67 ; Send A register to RS232, available in telemon 2.4 & 3.x XSOUT = $67 ; Send A register to RS232, available in telemon 2.4 & 3.x
XHRSSE = $8C ; Put in X and Y
XDRAWA = $8D ; Draw a line
XDRAWR = $8E ; Draw a line
XCIRCL = $8F XCIRCL = $8F
XCURSE = $90 XCURSE = $90
XCURMO = $91
XPAPER = $92 XPAPER = $92
XINK = $93 XINK = $93
XBOX = $94
XABOX = $95
XFILL = $96
XCHAR = $97
XSCHAR = $98 ; Draw a string
XEXPLO = $9C XEXPLO = $9C
XPING = $9D XPING = $9D
@ -158,6 +199,7 @@ SCRX := $220
SCRY := $224 SCRY := $224
ADSCRL := $218 ADSCRL := $218
ADSCRH := $21C ADSCRH := $21C
HRSPAT := $2AA ; Hires pattern : it's used to draw pattern for a line or a circle
IRQVECTOR := $2FA IRQVECTOR := $2FA

View File

@ -30,6 +30,76 @@
/* Color defines */
#define COLOR_BLACK 0x00
#define COLOR_RED 0x01
#define COLOR_GREEN 0x02
#define COLOR_YELLOW 0x03
#define COLOR_BLUE 0x04
#define COLOR_MAGENTA 0x05
#define COLOR_CYAN 0x06
#define COLOR_WHITE 0x07
/* TGI color defines */
/* White and red are swapped, so that the pallete
** driver is compatible with black-and-white drivers.
*/
#define TGI_COLOR_BLACK COLOR_BLACK
#define TGI_COLOR_WHITE 1
#define TGI_COLOR_GREEN COLOR_GREEN
#define TGI_COLOR_YELLOW COLOR_YELLOW
#define TGI_COLOR_BLUE COLOR_BLUE
#define TGI_COLOR_MAGENTA COLOR_MAGENTA
#define TGI_COLOR_CYAN COLOR_CYAN
#define TGI_COLOR_RED 7
extern void telestrat_228_200_3_tgi[];
extern void telestrat_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[] */
/* Define hardware */
#include <_6522.h>
#define VIA (*(struct __6522*)0x300)
/* These are defined to be FUNCT + NumberKey */
#define CH_F1 0xB1
#define CH_F2 0xB2
#define CH_F3 0xB3
#define CH_F4 0xB4
#define CH_F5 0xB5
#define CH_F6 0xB6
#define CH_F7 0xB7
#define CH_F8 0xB8
#define CH_F9 0xB9
#define CH_F10 0xB0
/* Character codes */
#define CH_ULCORNER '+'
#define CH_URCORNER '+'
#define CH_LLCORNER '+'
#define CH_LRCORNER '+'
#define CH_TTEE '+'
#define CH_BTEE '+'
#define CH_LTEE '+'
#define CH_RTEE '+'
#define CH_CROSS '+'
#define CH_CURS_UP 11
#define CH_CURS_DOWN 10
#define CH_CURS_LEFT 8
#define CH_CURS_RIGHT 9
#define CH_DEL 127
#define CH_ENTER 13
#define CH_STOP 3
#define CH_LIRA 95
#define CH_ESC 27
void oups(); void oups();
void ping(); void ping();
void zap(); void zap();

View File

@ -55,6 +55,7 @@ YSIZE = 8 ; System font height
.addr GETPIXEL .addr GETPIXEL
.addr LINE .addr LINE
.addr BAR .addr BAR
.addr CIRCLE
.addr TEXTSTYLE .addr TEXTSTYLE
.addr OUTTEXT .addr OUTTEXT
.addr 0 ; IRQ entry is unused .addr 0 ; IRQ entry is unused
@ -107,10 +108,13 @@ INIT:
; Switch into graphics mode. ; Switch into graphics mode.
BRK_TELEMON(XHIRES) BRK_TELEMON(XHIRES)
rts
; Done, reset the error code. ; Done, reset the error code.
lda #TGI_ERR_OK
sta ERROR
rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; GETERROR: Return the error code in A, and clear it. ; GETERROR: Return the error code in A, and clear it.
@ -251,7 +255,17 @@ GETDEFPALETTE:
; ;
SETPIXEL: SETPIXEL:
; not done yet
lda X1
sta HRS1
lda Y1
sta HRS2
lda #$80
sta HRSFB
BRK_TELEMON(XCURSE)
rts rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
@ -274,6 +288,10 @@ LINE:
; not done yet ; not done yet
rts rts
CIRCLE:
; not done yet
rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where ; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4, using the current drawing color. ; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4, using the current drawing color.

View File

@ -125,7 +125,7 @@ INIT:
; Switch into graphics mode ; Switch into graphics mode
BRK_TELEMON(XHIRES) BRK_TELEMON(XHIRES)
rts
; Done, reset the error code ; Done, reset the error code
lda #TGI_ERR_OK lda #TGI_ERR_OK
@ -248,7 +248,17 @@ GETDEFPALETTE:
; ;
SETPIXEL: SETPIXEL:
; not done yet
lda X1
sta HRS1
lda Y1
sta HRS2
lda #$80 ; curset on
sta HRSFB
BRK_TELEMON(XCURSE)
rts rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
@ -268,8 +278,13 @@ GETPIXEL:
; ;
LINE: LINE:
; not done yet ; not done yet
rts rts
CIRCLE:
; not done yet
rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where ; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color. ; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.