conio and most other stuff working now
This commit is contained in:
parent
88e7b5776a
commit
9fbf8a4299
35 changed files with 2205 additions and 737 deletions
|
@ -1,43 +1,70 @@
|
||||||
; gamate symbols
|
;-------------------------------------------------------------------------------
|
||||||
|
; gamate.inc
|
||||||
|
;
|
||||||
|
; Gamate system specific definitions
|
||||||
|
;
|
||||||
|
; (w) 2015 Groepaz/Hitmen (groepaz@gmx.net)
|
||||||
|
; based on technical reference by PeT (mess@utanet.at)
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
;.p02
|
; look at gamate.h for comments, they are not duplicated here
|
||||||
|
|
||||||
LCD_WIDTH = 160
|
AUDIO_BASE = $4000
|
||||||
LCD_HEIGHT = 152
|
|
||||||
|
|
||||||
lcd_base = $5000
|
JOY_DATA = $4400
|
||||||
lcd_mode = $5001
|
|
||||||
lcd_mode_y_increment = $40
|
|
||||||
lcd_x_pos = $5002
|
|
||||||
lcd_x_pos_plane2_flag =$80
|
|
||||||
lcd_y_pos = $5003
|
|
||||||
lcd_x = $5004
|
|
||||||
lcd_y = $5005
|
|
||||||
lcd_read = $5006
|
|
||||||
lcd_data = $5007
|
|
||||||
|
|
||||||
audio_base =$4000
|
JOY_DATA_UP = $01
|
||||||
|
JOY_DATA_DOWN = $02
|
||||||
|
JOY_DATA_LEFT = $04
|
||||||
|
JOY_DATA_RIGHT = $08
|
||||||
|
JOY_DATA_FIRE_A = $10
|
||||||
|
JOY_DATA_FIRE_B = $20
|
||||||
|
JOY_DATA_START = $40
|
||||||
|
JOY_DATA_SELECT = $80
|
||||||
|
|
||||||
controls = $4400
|
LCD_WIDTH = 160
|
||||||
; active low
|
LCD_HEIGHT = 152
|
||||||
up=1
|
|
||||||
down=2
|
|
||||||
left=4
|
|
||||||
right=8
|
|
||||||
button_a=$10
|
|
||||||
button_b=$20
|
|
||||||
start=$40
|
|
||||||
select=$80
|
|
||||||
|
|
||||||
cart_main = $6020
|
LCD_BASE = $5000
|
||||||
;cart_nmi = $6023
|
LCD_MODE = $5001
|
||||||
cart_irq = $6026 ; 135 hz
|
LCD_XPOS = $5002
|
||||||
cart_font = $6029
|
LCD_YPOS = $5003
|
||||||
|
LCD_X = $5004
|
||||||
|
LCD_Y = $5005
|
||||||
|
LCD_READ = $5006
|
||||||
|
LCD_DATA = $5007
|
||||||
|
|
||||||
nmi_enable = $c
|
LCD_MODE_INC_X = $00
|
||||||
nmi_4800 = $a
|
LCD_MODE_INC_Y = $40
|
||||||
|
LCD_XPOS_PLANE1 = $00
|
||||||
|
LCD_XPOS_PLANE2 = $80
|
||||||
|
|
||||||
_f009 = $f009 ; wait 1/60s
|
; constants for the conio implementation
|
||||||
_f00c = $f00c ; install font
|
charsperline = (LCD_WIDTH / 8)
|
||||||
_f012 = $f012 ; write screen
|
screenrows = (LCD_HEIGHT / 8)
|
||||||
|
|
||||||
|
CH_HLINE = 1
|
||||||
|
CH_VLINE = 2
|
||||||
|
|
||||||
|
COLOR_WHITE = 0
|
||||||
|
COLOR_GREY2 = 1
|
||||||
|
COLOR_GREY1 = 2
|
||||||
|
COLOR_BLACK = 3
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; bios zp usage:
|
||||||
|
;
|
||||||
|
; 06/07 address of character set bitplane 1
|
||||||
|
; 08/09 address of character set bitplane 2
|
||||||
|
; 0a nmi $4800 echo
|
||||||
|
; 0b irq counter
|
||||||
|
; 0c nmi call cart nmi
|
||||||
|
; 0e/0f/10/11 big endian irq counter
|
||||||
|
; 15/16/17 ?/xpos/ypos
|
||||||
|
;
|
||||||
|
; e8 nmi reset to $ff
|
||||||
|
;
|
||||||
|
|
||||||
|
ZP_NMI_4800 = $0a
|
||||||
|
ZP_NMI_ENABLE = $0c
|
||||||
|
|
||||||
|
|
|
@ -1,41 +1,39 @@
|
||||||
# c version of 32kbyte config file
|
# linker config to produce simple Gamate cartridge (.bin)
|
||||||
# .data located in rom
|
|
||||||
|
|
||||||
# ld65 config file
|
|
||||||
# ld65 --config gamate.cfg -o <prog>.bin <prog>.o
|
|
||||||
|
|
||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__STARTUP__: type = import;
|
__STARTUP__: type = import;
|
||||||
__STACKSIZE__: type = weak, value = $0300; # 3 pages stack
|
__STACKSIZE__: type = weak, value = $0080; # 1 page stack
|
||||||
}
|
}
|
||||||
|
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: start = $0000, size = $100;
|
# 0000-03ff is RAM
|
||||||
CPUSTACK: start = $0100, size =$100;
|
# FIXME: what zp range can we actually use?
|
||||||
RAM: start = $0200, size = $200, define = yes;
|
ZP: start = $0080, size = $80;
|
||||||
# ROM: start = $6000, size = $8000, fill = yes, fillval = $ff, file = %O, define = yes;
|
CPUSTACK: start = $0100, size =$100;
|
||||||
# STARTUP: file = %O, define = yes, start = $6000, size = $29, fill = yes;
|
RAM: start = $0200, size = $180, define = yes;
|
||||||
# ROM: start = $6000 + __STARTUP_SIZE__, size = $8000 - __STARTUP_SIZE__, fill = yes, fillval = $ff, file = %O, define = yes;
|
|
||||||
# WARNING: fill value must be $00 else it will no more work
|
# 6000-e000 can be (Cartridge) ROM
|
||||||
ROM: start = $6000, size = $8000, fill = yes, fillval = $00, file = %O, define = yes;
|
# WARNING: fill value must be $00 else it will no more work
|
||||||
|
#ROM: start = $6000, size = $1000, fill = yes, fillval = $00, file = %O, define = yes;
|
||||||
|
#ROMFILL: start = $7000, size = $7000, fill = yes, fillval = $00, file = %O, define = yes;
|
||||||
|
# for images that have code >$6fff we must calculate the checksum!
|
||||||
|
ROM: start = $6000, size = $8000, fill = yes, fillval = $00, file = %O, define = yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp, define = yes;
|
ZEROPAGE: load = ZP, type = zp, define = yes;
|
||||||
STARTUP: load = ROM, type = ro, define=yes;
|
EXTZP: load = ZP, type = zp, define = yes, optional = yes;
|
||||||
CODE: load = ROM, type = ro, define=yes;
|
APPZP: load = ZP, type = zp, define = yes, optional = yes;
|
||||||
RODATA: load = ROM, type = ro, define=yes;
|
STARTUP: load = ROM, type = ro, define=yes;
|
||||||
DATA: load = ROM, run=RAM, type = rw, define = yes;
|
INIT: load = ROM, type = ro, define = yes, optional = yes;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
CODE: load = ROM, type = ro, define=yes;
|
||||||
|
RODATA: load = ROM, type = ro, define=yes;
|
||||||
|
DATA: load = ROM, run=RAM, type = rw, define = yes;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: segment = RODATA,
|
CONDES: segment = RODATA, type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__;
|
||||||
type = constructor,
|
CONDES: segment = RODATA, type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__;
|
||||||
label = __CONSTRUCTOR_TABLE__,
|
CONDES: segment = RODATA, type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, import = __CALLIRQ__;
|
||||||
count = __CONSTRUCTOR_COUNT__;
|
|
||||||
CONDES: segment = RODATA,
|
|
||||||
type = destructor,
|
|
||||||
label = __DESTRUCTOR_TABLE__,
|
|
||||||
count = __DESTRUCTOR_COUNT__;
|
|
||||||
}
|
}
|
||||||
|
|
140
include/gamate.h
140
include/gamate.h
|
@ -6,8 +6,8 @@
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2015 Groepaz/Hitmen */
|
/* (w) 2015 Groepaz/Hitmen (groepaz@gmx.net) */
|
||||||
/* */
|
/* based on technical reference by PeT (mess@utanet.at) */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
/* warranty. In no event will the authors be held liable for any damages */
|
/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
@ -36,7 +36,143 @@
|
||||||
# error This module may only be used when compiling for the Gamate!
|
# error This module may only be used when compiling for the Gamate!
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define AUDIO_BASE 0x4000
|
||||||
|
|
||||||
|
/*
|
||||||
|
base clock cpu clock/32 ?
|
||||||
|
|
||||||
|
0/1: 1. channel(right): 12 bit frequency: right frequency 0 nothing, 1 high; 3 23khz; 4 17,3; 10 6,9; 15 4.6; $60 720hz; $eff 18,0; $fff 16,9 hz)
|
||||||
|
(delay clock/32)
|
||||||
|
2/3: 2. channel(left): 12 bit frequency
|
||||||
|
4/5: 3. channel(both): 12 bit frequency
|
||||||
|
6: 0..5 noise frequency 0 fast 1f slow (about 500us) 15.6ns--> clock/32 counts
|
||||||
|
7 control (hinibble right)
|
||||||
|
bit 0: right channel high (full cycle, else square pulse/tone)
|
||||||
|
bit 1: left channel high
|
||||||
|
bit 2: both channel high
|
||||||
|
bit 3: set right tone (else noise)
|
||||||
|
bit 4: set left channel normal
|
||||||
|
bit 5: set both normal
|
||||||
|
bits 30: 11 high, 10 square, 01 noise, 00 noise only when square high
|
||||||
|
noise means switches channel to ad converter based noise algorithmen
|
||||||
|
(white noise shift register 17bit wide, repeats after about 130000 cycles)
|
||||||
|
probably out=!bit16, bit0=bit16 xor bit13; runs through, so start value anything than 0
|
||||||
|
8: 1st volume: 0..3 square volume; bit 4 envelope (higher priority)
|
||||||
|
9: 2nd volume
|
||||||
|
10: 3rd volume
|
||||||
|
11/12: envelope delay time 0 fast, 0xffff slow/nearly no effect (2 22us, 4 56us)
|
||||||
|
frequency $800, envelope $10 2 times in pulse high time (4*16*16)
|
||||||
|
13: envelope control
|
||||||
|
0-3 one time falling
|
||||||
|
4-7 one time rising
|
||||||
|
8 falling
|
||||||
|
9 one time falling
|
||||||
|
a starts with down falling, rising; same falling time, but double/longer cycle
|
||||||
|
b one time falling, on
|
||||||
|
c rising
|
||||||
|
d one time rising, on
|
||||||
|
e rising, falling (double cycle before restart)
|
||||||
|
f one time rising
|
||||||
|
bit 0: once only
|
||||||
|
bit 1: full tone
|
||||||
|
bit 2: start rising (else falling)
|
||||||
|
bit 3:
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define JOY_DATA 0x4400
|
||||||
|
|
||||||
|
#define JOY_DATA_UP 0x01
|
||||||
|
#define JOY_DATA_DOWN 0x02
|
||||||
|
#define JOY_DATA_LEFT 0x04
|
||||||
|
#define JOY_DATA_RIGHT 0x08
|
||||||
|
#define JOY_DATA_FIRE_A 0x10
|
||||||
|
#define JOY_DATA_FIRE_B 0x20
|
||||||
|
#define JOY_DATA_START 0x40
|
||||||
|
#define JOY_DATA_SELECT 0x80
|
||||||
|
|
||||||
|
/* LCD
|
||||||
|
|
||||||
|
resolution 160x152 in 4 greys/greens
|
||||||
|
2 256x256 sized bitplanes (2x 8kbyte ram)
|
||||||
|
*/
|
||||||
|
#define LCD_BASE 0x5000
|
||||||
|
|
||||||
|
#define LCD_MODE 0x5001
|
||||||
|
/*
|
||||||
|
bit 3..0 (from zeropage 15)
|
||||||
|
bit 0 set no normal screen display, seldom scrolling effects on screen;
|
||||||
|
bytes written to somewhat actual display refresh position!?
|
||||||
|
bytes read "random"
|
||||||
|
bit 1,2,3 no effect
|
||||||
|
bit 4 swaps plane intensity
|
||||||
|
bit 5 ? display effect
|
||||||
|
bit 6 on y auto increment (else auto x increment), reading
|
||||||
|
bit 7 ? lcd flickering
|
||||||
|
*/
|
||||||
|
#define LCD_MODE_INC_Y 0x40
|
||||||
|
|
||||||
|
#define LCD_XPOS 0x5002 /* smooth scrolling X */
|
||||||
|
#define LCD_YPOS 0x5003 /* smooth scrolling Y */
|
||||||
|
/*
|
||||||
|
smooth scrolling until $c8 with 200 limit
|
||||||
|
after 200 display if ((value & 0xf) < 8) display of (value & 0xf) - 8
|
||||||
|
chaos lines from value + current line from plane 2 only then lines starting
|
||||||
|
with zero (problematic 200 limit/overrun implementation!?)
|
||||||
|
*/
|
||||||
|
#define LCD_X 0x5004 /* x-addr */
|
||||||
|
/*
|
||||||
|
bit 5,6 no effect
|
||||||
|
bit 7 0 1st/1 2nd bitplane
|
||||||
|
*/
|
||||||
|
#define LCD_XPOS_PLANE1 0x00
|
||||||
|
#define LCD_XPOS_PLANE2 0x80
|
||||||
|
|
||||||
|
#define LCD_Y 0x5005 /* y-addr */
|
||||||
|
|
||||||
|
#define LCD_READ 0x5006 /* read from RAM (no auto inc?) */
|
||||||
|
#define LCD_DATA 0x5007 /* write to RAM */
|
||||||
|
|
||||||
|
|
||||||
|
/* constants for the conio implementation */
|
||||||
|
#define COLOR_BLACK 0x03
|
||||||
|
#define COLOR_WHITE 0x00
|
||||||
|
|
||||||
|
#define CH_HLINE 1
|
||||||
|
#define CH_VLINE 2
|
||||||
|
#define CH_CROSS 3
|
||||||
|
#define CH_ULCORNER 4
|
||||||
|
#define CH_URCORNER 5
|
||||||
|
#define CH_LLCORNER 6
|
||||||
|
#define CH_LRCORNER 7
|
||||||
|
#define CH_TTEE 8
|
||||||
|
#define CH_BTEE 9
|
||||||
|
|
||||||
|
#define CH_RTEE 11
|
||||||
|
#define CH_LTEE 12
|
||||||
|
|
||||||
|
#define CH_ENTER 13
|
||||||
|
#define CH_PI 18
|
||||||
|
|
||||||
|
#define TV_NTSC 0
|
||||||
|
#define TV_PAL 1
|
||||||
|
#define TV_OTHER 2
|
||||||
|
|
||||||
|
/* No support for dynamically loadable drivers */
|
||||||
|
#define DYN_DRV 0
|
||||||
|
|
||||||
|
/* The addresses of the static drivers */
|
||||||
|
extern void gamate_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
|
||||||
|
|
||||||
|
#define JOY_FIRE_B 5
|
||||||
|
#define JOY_START 6
|
||||||
|
#define JOY_SELECT 7
|
||||||
|
|
||||||
|
void waitvblank (void);
|
||||||
|
/* Wait for the vertical blanking */
|
||||||
|
|
||||||
|
/* NOTE: all Gamate are "NTSC" */
|
||||||
|
#define get_tv() TV_NTSC
|
||||||
|
/* Return the video mode the machine is using. */
|
||||||
|
|
||||||
/* End of gamate.h */
|
/* End of gamate.h */
|
||||||
#endif
|
#endif
|
||||||
|
|
16
libsrc/gamate/_scrsize.s
Normal file
16
libsrc/gamate/_scrsize.s
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
;
|
||||||
|
; Screen size variables
|
||||||
|
;
|
||||||
|
.include "gamate.inc"
|
||||||
|
|
||||||
|
.export screensize
|
||||||
|
screensize:
|
||||||
|
ldx xsize
|
||||||
|
ldy ysize
|
||||||
|
rts
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
.export xsize, ysize
|
||||||
|
|
||||||
|
xsize: .byte charsperline
|
||||||
|
ysize: .byte screenrows
|
32
libsrc/gamate/chline.s
Normal file
32
libsrc/gamate/chline.s
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 08.08.1998
|
||||||
|
;
|
||||||
|
; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||||||
|
; void chline (unsigned char length);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _chlinexy, _chline
|
||||||
|
.import popa, _gotoxy, cputdirect
|
||||||
|
.importzp tmp1
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
|
||||||
|
_chlinexy:
|
||||||
|
pha ; Save the length
|
||||||
|
jsr popa ; Get y
|
||||||
|
jsr _gotoxy ; Call this one, will pop params
|
||||||
|
pla ; Restore the length
|
||||||
|
|
||||||
|
_chline:
|
||||||
|
cmp #0 ; Is the length zero?
|
||||||
|
beq L9 ; Jump if done
|
||||||
|
sta tmp1
|
||||||
|
L1: lda #CH_HLINE ; Horizontal line, screen code
|
||||||
|
jsr cputdirect ; Direct output
|
||||||
|
dec tmp1
|
||||||
|
bne L1
|
||||||
|
L9: rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
33
libsrc/gamate/clock.s
Normal file
33
libsrc/gamate/clock.s
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
;
|
||||||
|
; clock_t clock (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.export _clock
|
||||||
|
.forceimport ticktock
|
||||||
|
.importzp sreg
|
||||||
|
.constructor initclock
|
||||||
|
|
||||||
|
|
||||||
|
.proc _clock
|
||||||
|
|
||||||
|
lda tickcount+3
|
||||||
|
sta sreg+1
|
||||||
|
lda tickcount+2
|
||||||
|
sta sreg
|
||||||
|
ldx tickcount+1
|
||||||
|
lda tickcount
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.segment "INIT"
|
||||||
|
initclock:
|
||||||
|
lda #0
|
||||||
|
ldx #3
|
||||||
|
@lp: sta tickcount,x
|
||||||
|
dex
|
||||||
|
bpl @lp
|
||||||
|
rts
|
35
libsrc/gamate/clrscr.s
Normal file
35
libsrc/gamate/clrscr.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.import plot
|
||||||
|
.export _clrscr
|
||||||
|
_clrscr:
|
||||||
|
ldy #$0
|
||||||
|
rowloop:
|
||||||
|
sty LCD_X
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta LCD_Y
|
||||||
|
|
||||||
|
ldx #$0
|
||||||
|
colloop:
|
||||||
|
sta LCD_DATA
|
||||||
|
|
||||||
|
inx
|
||||||
|
bne colloop
|
||||||
|
|
||||||
|
iny
|
||||||
|
bne rowloop
|
||||||
|
|
||||||
|
; Go to the home position.
|
||||||
|
|
||||||
|
sta CURS_X
|
||||||
|
sta CURS_Y
|
||||||
|
jmp plot
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; force the init constructor to be imported
|
||||||
|
|
||||||
|
.import initconio
|
||||||
|
conio_init = initconio
|
34
libsrc/gamate/color.s
Normal file
34
libsrc/gamate/color.s
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
;
|
||||||
|
; unsigned char __fastcall__ textcolor (unsigned char color);
|
||||||
|
; unsigned char __fastcall__ bgcolor (unsigned char color);
|
||||||
|
; unsigned char __fastcall__ bordercolor (unsigned char color);
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
.export _textcolor, _bgcolor, _bordercolor
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
_textcolor:
|
||||||
|
ldx CHARCOLOR ; get old value
|
||||||
|
sta CHARCOLOR ; set new value
|
||||||
|
txa
|
||||||
|
rts
|
||||||
|
|
||||||
|
_bgcolor:
|
||||||
|
ldx BGCOLOR ; get old value
|
||||||
|
sta BGCOLOR ; set new value
|
||||||
|
txa
|
||||||
|
rts
|
||||||
|
|
||||||
|
_bordercolor:
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; force the init constructor to be imported
|
||||||
|
|
||||||
|
.import initconio
|
||||||
|
conio_init = initconio
|
31
libsrc/gamate/conio.s
Normal file
31
libsrc/gamate/conio.s
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.import colors
|
||||||
|
.importzp ptr1, tmp1
|
||||||
|
|
||||||
|
.constructor initconio
|
||||||
|
|
||||||
|
.macpack longbranch
|
||||||
|
|
||||||
|
.segment "INIT"
|
||||||
|
initconio:
|
||||||
|
; FIXME
|
||||||
|
lda #0
|
||||||
|
sta LCD_XPOS
|
||||||
|
sta LCD_YPOS
|
||||||
|
|
||||||
|
lda #LCD_MODE_INC_Y
|
||||||
|
sta LCD_MODE
|
||||||
|
|
||||||
|
lda #COLOR_BLACK
|
||||||
|
sta CHARCOLOR
|
||||||
|
lda #COLOR_WHITE
|
||||||
|
sta BGCOLOR
|
||||||
|
rts
|
||||||
|
|
||||||
|
.segment "RODATA"
|
||||||
|
|
||||||
|
.export fontdata
|
||||||
|
fontdata:
|
||||||
|
.include "vga.inc"
|
153
libsrc/gamate/cputc.s
Normal file
153
libsrc/gamate/cputc.s
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
;
|
||||||
|
; void cputcxy (unsigned char x, unsigned char y, char c);
|
||||||
|
; void cputc (char c);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cputcxy, _cputc, cputdirect, putchar
|
||||||
|
.export newline, plot
|
||||||
|
.import popa, _gotoxy
|
||||||
|
.import PLOT
|
||||||
|
.import xsize
|
||||||
|
.import fontdata
|
||||||
|
.import _plotlo
|
||||||
|
|
||||||
|
.importzp tmp3,tmp4
|
||||||
|
.importzp ptr3
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
_cputcxy:
|
||||||
|
pha ; Save C
|
||||||
|
jsr popa ; Get Y
|
||||||
|
jsr _gotoxy ; Set cursor, drop x
|
||||||
|
pla ; Restore C
|
||||||
|
|
||||||
|
; Plot a character - also used as internal function
|
||||||
|
|
||||||
|
_cputc: cmp #$0d ; CR?
|
||||||
|
bne L1
|
||||||
|
lda #0
|
||||||
|
sta CURS_X
|
||||||
|
beq plot ; Recalculate pointers
|
||||||
|
|
||||||
|
L1: cmp #$0a ; LF?
|
||||||
|
beq newline ; Recalculate pointers
|
||||||
|
|
||||||
|
; Printable char of some sort
|
||||||
|
|
||||||
|
cputdirect:
|
||||||
|
jsr putchar ; Write the character to the screen
|
||||||
|
|
||||||
|
; Advance cursor position
|
||||||
|
|
||||||
|
advance:
|
||||||
|
ldy CURS_X
|
||||||
|
iny
|
||||||
|
cpy xsize
|
||||||
|
bne L3
|
||||||
|
jsr newline ; new line
|
||||||
|
ldy #0 ; + cr
|
||||||
|
L3: sty CURS_X
|
||||||
|
jmp plot
|
||||||
|
|
||||||
|
newline:
|
||||||
|
inc CURS_Y
|
||||||
|
|
||||||
|
; Set cursor position, calculate RAM pointers
|
||||||
|
|
||||||
|
plot: ldy CURS_X
|
||||||
|
ldx CURS_Y
|
||||||
|
clc
|
||||||
|
jmp PLOT ; Set the new cursor
|
||||||
|
|
||||||
|
; Write one character to the screen without doing anything else, return X
|
||||||
|
; position in Y
|
||||||
|
|
||||||
|
putchar:
|
||||||
|
|
||||||
|
; FIXME
|
||||||
|
; ora RVS ; Set revers bit
|
||||||
|
|
||||||
|
; sty temp_y
|
||||||
|
; stx temp_x
|
||||||
|
; sta temp_a
|
||||||
|
|
||||||
|
; lda temp_a
|
||||||
|
|
||||||
|
sta ptr3
|
||||||
|
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta ptr3+1
|
||||||
|
; * 8
|
||||||
|
asl ptr3
|
||||||
|
rol ptr3+1
|
||||||
|
asl ptr3
|
||||||
|
rol ptr3+1
|
||||||
|
asl ptr3
|
||||||
|
rol ptr3+1
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #<(fontdata-$f8)
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
adc #>(fontdata-$f8)
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
lda CHARCOLOR
|
||||||
|
and #1
|
||||||
|
beq @skip_plane1
|
||||||
|
|
||||||
|
lda #LCD_XPOS_PLANE1
|
||||||
|
clc
|
||||||
|
adc CURS_X
|
||||||
|
sta LCD_X
|
||||||
|
|
||||||
|
ldy #$f8
|
||||||
|
@copylp1:
|
||||||
|
lda (ptr3),y
|
||||||
|
eor RVS
|
||||||
|
sta LCD_DATA
|
||||||
|
iny
|
||||||
|
bne @copylp1
|
||||||
|
|
||||||
|
@skip_plane1:
|
||||||
|
|
||||||
|
lda CHARCOLOR
|
||||||
|
and #2
|
||||||
|
beq @skip_plane2
|
||||||
|
|
||||||
|
lda #LCD_XPOS_PLANE2
|
||||||
|
clc
|
||||||
|
adc CURS_X
|
||||||
|
sta LCD_X
|
||||||
|
|
||||||
|
ldx CURS_Y
|
||||||
|
lda _plotlo,x
|
||||||
|
sta LCD_Y
|
||||||
|
|
||||||
|
ldy #$f8
|
||||||
|
@copylp2:
|
||||||
|
lda (ptr3),y
|
||||||
|
eor RVS
|
||||||
|
sta LCD_DATA
|
||||||
|
iny
|
||||||
|
bne @copylp2
|
||||||
|
|
||||||
|
@skip_plane2:
|
||||||
|
|
||||||
|
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
ldy CURS_X
|
||||||
|
rts
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; force the init constructor to be imported
|
||||||
|
|
||||||
|
.import initconio
|
||||||
|
conio_init = initconio
|
|
@ -1,16 +1,78 @@
|
||||||
|
|
||||||
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
||||||
|
|
||||||
.import reset, irq, nmi ; FIXME
|
.import initlib, donelib, callmain
|
||||||
|
.import push0, _main, zerobss, copydata
|
||||||
|
|
||||||
|
.import IRQStub
|
||||||
|
|
||||||
|
; Linker generated symbols
|
||||||
|
.import __RAM_START__, __RAM_SIZE__
|
||||||
|
.import __ROM_START__, __ROM_SIZE__
|
||||||
|
.import __STARTUP_LOAD__,__STARTUP_RUN__, __STARTUP_SIZE__
|
||||||
|
.import __CODE_LOAD__,__CODE_RUN__, __CODE_SIZE__
|
||||||
|
.import __RODATA_LOAD__,__RODATA_RUN__, __RODATA_SIZE__
|
||||||
|
|
||||||
|
.include "zeropage.inc"
|
||||||
|
.include "gamate.inc"
|
||||||
|
|
||||||
.segment "STARTUP"
|
.segment "STARTUP"
|
||||||
|
|
||||||
checksum:
|
.word 0 ; +00 checksum from 7000-7fff (simple 8bit adds)
|
||||||
.word 0
|
.byte 1, 0, 1 ; +02 flags
|
||||||
.byte 1, 0, 1
|
.byte "COPYRIGHT BIT CORPORATION", 0, $ff ; +05 copyright
|
||||||
.byte "COPYRIGHT BIT CORPORATION", 0, $ff
|
; system vectors
|
||||||
jmp reset
|
jmp reset ; +20 reset entry
|
||||||
jmp nmi
|
jmp nmi ; +23 nmi entry
|
||||||
jmp irq
|
jmp IRQStub ; +26 irq entry (135 hz)
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
reset:
|
||||||
|
; setup the CPU and System-IRQ
|
||||||
|
|
||||||
|
; Initialize CPU
|
||||||
|
sei
|
||||||
|
cld
|
||||||
|
|
||||||
|
; Setup stack and memory mapping
|
||||||
|
ldx #$FF ; Stack top ($01FF)
|
||||||
|
txs
|
||||||
|
|
||||||
|
; Clear the BSS data
|
||||||
|
jsr zerobss
|
||||||
|
|
||||||
|
; Copy the .data segment to RAM
|
||||||
|
jsr copydata
|
||||||
|
|
||||||
|
; setup the stack
|
||||||
|
lda #<(__RAM_START__+__RAM_SIZE__)
|
||||||
|
sta sp
|
||||||
|
lda #>(__RAM_START__+__RAM_SIZE__)
|
||||||
|
sta sp + 1
|
||||||
|
|
||||||
|
; Call module constructors
|
||||||
|
jsr initlib
|
||||||
|
|
||||||
|
cli ; allow IRQ only after constructors have run
|
||||||
|
|
||||||
|
; Pass an empty command line
|
||||||
|
jsr push0 ; argc
|
||||||
|
jsr push0 ; argv
|
||||||
|
|
||||||
|
ldy #4 ; Argument size
|
||||||
|
jsr _main ; call the users code
|
||||||
|
|
||||||
|
; Call module destructors. This is also the _exit entry.
|
||||||
|
_exit:
|
||||||
|
jsr donelib ; Run module destructors
|
||||||
|
|
||||||
|
; reset (start over)
|
||||||
|
jmp reset
|
||||||
|
|
||||||
|
.export initmainargs
|
||||||
|
initmainargs:
|
||||||
|
rts
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
nmi:
|
||||||
|
rts
|
||||||
|
|
161
libsrc/gamate/ctype.s
Normal file
161
libsrc/gamate/ctype.s
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
;
|
||||||
|
; Stefan Haubenthal with minor changes from Ullrich von Bassewitz, 2003-05-02
|
||||||
|
;
|
||||||
|
; Character specification table.
|
||||||
|
;
|
||||||
|
|
||||||
|
.include "ctype.inc"
|
||||||
|
|
||||||
|
; The tables are readonly, put them into the rodata segment
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
|
||||||
|
; The following 256 byte wide table specifies attributes for the isxxx type
|
||||||
|
; of functions. Doing it by a table means some overhead in space, but it
|
||||||
|
; has major advantages:
|
||||||
|
;
|
||||||
|
; * It is fast. If it were'nt for the slow parameter passing of cc65, one
|
||||||
|
; could even define macros for the isxxx functions (this is usually
|
||||||
|
; done on other platforms).
|
||||||
|
;
|
||||||
|
; * It is highly portable. The only unportable part is the table itself,
|
||||||
|
; all real code goes into the common library.
|
||||||
|
;
|
||||||
|
; * We save some code in the isxxx functions.
|
||||||
|
|
||||||
|
|
||||||
|
__ctype:
|
||||||
|
.repeat 2
|
||||||
|
.byte CT_CTRL ; 0/00 ___ctrl_@___
|
||||||
|
.byte CT_CTRL ; 1/01 ___ctrl_A___
|
||||||
|
.byte CT_CTRL ; 2/02 ___ctrl_B___
|
||||||
|
.byte CT_CTRL ; 3/03 ___ctrl_C___
|
||||||
|
.byte CT_CTRL ; 4/04 ___ctrl_D___
|
||||||
|
.byte CT_CTRL ; 5/05 ___ctrl_E___
|
||||||
|
.byte CT_CTRL ; 6/06 ___ctrl_F___
|
||||||
|
.byte CT_CTRL ; 7/07 ___ctrl_G___
|
||||||
|
.byte CT_CTRL ; 8/08 ___ctrl_H___
|
||||||
|
.byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
|
||||||
|
; 9/09 ___ctrl_I___
|
||||||
|
.byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___
|
||||||
|
.byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___
|
||||||
|
.byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___
|
||||||
|
.byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___
|
||||||
|
.byte CT_CTRL ; 14/0e ___ctrl_N___
|
||||||
|
.byte CT_CTRL ; 15/0f ___ctrl_O___
|
||||||
|
.byte CT_CTRL ; 16/10 ___ctrl_P___
|
||||||
|
.byte CT_CTRL ; 17/11 ___ctrl_Q___
|
||||||
|
.byte CT_CTRL ; 18/12 ___ctrl_R___
|
||||||
|
.byte CT_CTRL ; 19/13 ___ctrl_S___
|
||||||
|
.byte CT_CTRL ; 20/14 ___ctrl_T___
|
||||||
|
.byte CT_CTRL ; 21/15 ___ctrl_U___
|
||||||
|
.byte CT_CTRL ; 22/16 ___ctrl_V___
|
||||||
|
.byte CT_CTRL ; 23/17 ___ctrl_W___
|
||||||
|
.byte CT_CTRL ; 24/18 ___ctrl_X___
|
||||||
|
.byte CT_CTRL ; 25/19 ___ctrl_Y___
|
||||||
|
.byte CT_CTRL ; 26/1a ___ctrl_Z___
|
||||||
|
.byte CT_CTRL ; 27/1b ___ctrl_[___
|
||||||
|
.byte CT_CTRL ; 28/1c ___ctrl_\___
|
||||||
|
.byte CT_CTRL ; 29/1d ___ctrl_]___
|
||||||
|
.byte CT_CTRL ; 30/1e ___ctrl_^___
|
||||||
|
.byte CT_CTRL ; 31/1f ___ctrl_____
|
||||||
|
.byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___
|
||||||
|
.byte CT_NONE ; 33/21 _____!_____
|
||||||
|
.byte CT_NONE ; 34/22 _____"_____
|
||||||
|
.byte CT_NONE ; 35/23 _____#_____
|
||||||
|
.byte CT_NONE ; 36/24 _____$_____
|
||||||
|
.byte CT_NONE ; 37/25 _____%_____
|
||||||
|
.byte CT_NONE ; 38/26 _____&_____
|
||||||
|
.byte CT_NONE ; 39/27 _____'_____
|
||||||
|
.byte CT_NONE ; 40/28 _____(_____
|
||||||
|
.byte CT_NONE ; 41/29 _____)_____
|
||||||
|
.byte CT_NONE ; 42/2a _____*_____
|
||||||
|
.byte CT_NONE ; 43/2b _____+_____
|
||||||
|
.byte CT_NONE ; 44/2c _____,_____
|
||||||
|
.byte CT_NONE ; 45/2d _____-_____
|
||||||
|
.byte CT_NONE ; 46/2e _____._____
|
||||||
|
.byte CT_NONE ; 47/2f _____/_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____
|
||||||
|
.byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____
|
||||||
|
.byte CT_NONE ; 58/3a _____:_____
|
||||||
|
.byte CT_NONE ; 59/3b _____;_____
|
||||||
|
.byte CT_NONE ; 60/3c _____<_____
|
||||||
|
.byte CT_NONE ; 61/3d _____=_____
|
||||||
|
.byte CT_NONE ; 62/3e _____>_____
|
||||||
|
.byte CT_NONE ; 63/3f _____?_____
|
||||||
|
|
||||||
|
.byte CT_NONE ; 64/40 _____@_____
|
||||||
|
.byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____
|
||||||
|
.byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____
|
||||||
|
.byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____
|
||||||
|
.byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____
|
||||||
|
.byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____
|
||||||
|
.byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____
|
||||||
|
.byte CT_UPPER ; 71/47 _____G_____
|
||||||
|
.byte CT_UPPER ; 72/48 _____H_____
|
||||||
|
.byte CT_UPPER ; 73/49 _____I_____
|
||||||
|
.byte CT_UPPER ; 74/4a _____J_____
|
||||||
|
.byte CT_UPPER ; 75/4b _____K_____
|
||||||
|
.byte CT_UPPER ; 76/4c _____L_____
|
||||||
|
.byte CT_UPPER ; 77/4d _____M_____
|
||||||
|
.byte CT_UPPER ; 78/4e _____N_____
|
||||||
|
.byte CT_UPPER ; 79/4f _____O_____
|
||||||
|
.byte CT_UPPER ; 80/50 _____P_____
|
||||||
|
.byte CT_UPPER ; 81/51 _____Q_____
|
||||||
|
.byte CT_UPPER ; 82/52 _____R_____
|
||||||
|
.byte CT_UPPER ; 83/53 _____S_____
|
||||||
|
.byte CT_UPPER ; 84/54 _____T_____
|
||||||
|
.byte CT_UPPER ; 85/55 _____U_____
|
||||||
|
.byte CT_UPPER ; 86/56 _____V_____
|
||||||
|
.byte CT_UPPER ; 87/57 _____W_____
|
||||||
|
.byte CT_UPPER ; 88/58 _____X_____
|
||||||
|
.byte CT_UPPER ; 89/59 _____Y_____
|
||||||
|
.byte CT_UPPER ; 90/5a _____Z_____
|
||||||
|
.byte CT_NONE ; 91/5b _____[_____
|
||||||
|
.byte CT_NONE ; 92/5c _____\_____
|
||||||
|
.byte CT_NONE ; 93/5d _____]_____
|
||||||
|
.byte CT_NONE ; 94/5e _____^_____
|
||||||
|
.byte CT_NONE ; 95/5f _UNDERLINE_
|
||||||
|
.byte CT_NONE ; 96/60 ___grave___
|
||||||
|
.byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____
|
||||||
|
.byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____
|
||||||
|
.byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____
|
||||||
|
.byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____
|
||||||
|
.byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____
|
||||||
|
.byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____
|
||||||
|
.byte CT_LOWER ; 103/67 _____g_____
|
||||||
|
.byte CT_LOWER ; 104/68 _____h_____
|
||||||
|
.byte CT_LOWER ; 105/69 _____i_____
|
||||||
|
.byte CT_LOWER ; 106/6a _____j_____
|
||||||
|
.byte CT_LOWER ; 107/6b _____k_____
|
||||||
|
.byte CT_LOWER ; 108/6c _____l_____
|
||||||
|
.byte CT_LOWER ; 109/6d _____m_____
|
||||||
|
.byte CT_LOWER ; 110/6e _____n_____
|
||||||
|
.byte CT_LOWER ; 111/6f _____o_____
|
||||||
|
.byte CT_LOWER ; 112/70 _____p_____
|
||||||
|
.byte CT_LOWER ; 113/71 _____q_____
|
||||||
|
.byte CT_LOWER ; 114/72 _____r_____
|
||||||
|
.byte CT_LOWER ; 115/73 _____s_____
|
||||||
|
.byte CT_LOWER ; 116/74 _____t_____
|
||||||
|
.byte CT_LOWER ; 117/75 _____u_____
|
||||||
|
.byte CT_LOWER ; 118/76 _____v_____
|
||||||
|
.byte CT_LOWER ; 119/77 _____w_____
|
||||||
|
.byte CT_LOWER ; 120/78 _____x_____
|
||||||
|
.byte CT_LOWER ; 121/79 _____y_____
|
||||||
|
.byte CT_LOWER ; 122/7a _____z_____
|
||||||
|
.byte CT_NONE ; 123/7b _____{_____
|
||||||
|
.byte CT_NONE ; 124/7c _____|_____
|
||||||
|
.byte CT_NONE ; 125/7d _____}_____
|
||||||
|
.byte CT_NONE ; 126/7e _____~_____
|
||||||
|
.byte CT_OTHER_WS ; 127/7f ____DEL____
|
||||||
|
.endrepeat
|
||||||
|
|
||||||
|
|
32
libsrc/gamate/cvline.s
Normal file
32
libsrc/gamate/cvline.s
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 08.08.1998
|
||||||
|
;
|
||||||
|
; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||||||
|
; void cvline (unsigned char length);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cvlinexy, _cvline
|
||||||
|
.import popa, _gotoxy, putchar, newline
|
||||||
|
.importzp tmp1
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
|
||||||
|
_cvlinexy:
|
||||||
|
pha ; Save the length
|
||||||
|
jsr popa ; Get y
|
||||||
|
jsr _gotoxy ; Call this one, will pop params
|
||||||
|
pla ; Restore the length and run into _cvline
|
||||||
|
|
||||||
|
_cvline:
|
||||||
|
cmp #0 ; Is the length zero?
|
||||||
|
beq L9 ; Jump if done
|
||||||
|
sta tmp1
|
||||||
|
L1: lda #CH_VLINE ; Vertical bar
|
||||||
|
jsr putchar ; Write, no cursor advance
|
||||||
|
jsr newline ; Advance cursor to next line
|
||||||
|
dec tmp1
|
||||||
|
bne L1
|
||||||
|
L9: rts
|
||||||
|
|
||||||
|
|
||||||
|
|
16
libsrc/gamate/extzp.inc
Normal file
16
libsrc/gamate/extzp.inc
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
;
|
||||||
|
; extzp.inc for the Gamate
|
||||||
|
;
|
||||||
|
; Groepaz/Hitmen, 2015-11-19
|
||||||
|
;
|
||||||
|
; Assembler include file that imports the runtime zero page locations used
|
||||||
|
; by the Gamate runtime, ready for usage in asm code.
|
||||||
|
;
|
||||||
|
|
||||||
|
.global CURS_X: zp
|
||||||
|
.global CURS_Y: zp
|
||||||
|
.global CHARCOLOR: zp
|
||||||
|
.global RVS: zp
|
||||||
|
.global BGCOLOR: zp
|
||||||
|
.global tickcount: zp
|
||||||
|
|
16
libsrc/gamate/extzp.s
Normal file
16
libsrc/gamate/extzp.s
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
;
|
||||||
|
; Groepaz/Hitmen, 2015-11-19
|
||||||
|
;
|
||||||
|
; zeropage locations for exclusive use by the library
|
||||||
|
;
|
||||||
|
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.segment "EXTZP" : zeropage
|
||||||
|
|
||||||
|
CURS_X: .res 1
|
||||||
|
CURS_Y: .res 1
|
||||||
|
CHARCOLOR: .res 1
|
||||||
|
RVS: .res 1
|
||||||
|
BGCOLOR: .res 1
|
||||||
|
tickcount: .res 4
|
22
libsrc/gamate/gotoxy.s
Normal file
22
libsrc/gamate/gotoxy.s
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
;
|
||||||
|
; void gotoxy (unsigned char x, unsigned char y);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _gotoxy
|
||||||
|
.import popa, plot
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
_gotoxy:
|
||||||
|
sta CURS_Y ; Set Y
|
||||||
|
jsr popa ; Get X
|
||||||
|
sta CURS_X ; Set X
|
||||||
|
jmp plot ; Set the cursor position
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; force the init constructor to be imported
|
||||||
|
|
||||||
|
.import initconio
|
||||||
|
conio_init = initconio
|
||||||
|
|
51
libsrc/gamate/irq.s
Normal file
51
libsrc/gamate/irq.s
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
;
|
||||||
|
; IRQ handling (Gamate version)
|
||||||
|
;
|
||||||
|
|
||||||
|
.export initirq, doneirq, IRQStub
|
||||||
|
|
||||||
|
.import __INTERRUPTOR_COUNT__, callirq_y
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
.segment "INIT"
|
||||||
|
|
||||||
|
; a constructor
|
||||||
|
;
|
||||||
|
initirq:
|
||||||
|
rts
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
.code
|
||||||
|
|
||||||
|
; a destructor
|
||||||
|
;
|
||||||
|
doneirq:
|
||||||
|
rts
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; 256*32 interrupts in about 1minute 60s = 136hz
|
||||||
|
; -> guess 16384 clock cycles = 135,28hz (might be audio signal 1/512?)
|
||||||
|
|
||||||
|
IRQStub:
|
||||||
|
pha
|
||||||
|
tya
|
||||||
|
pha
|
||||||
|
|
||||||
|
ldy #<(__INTERRUPTOR_COUNT__ * 2)
|
||||||
|
beq @L1
|
||||||
|
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
|
||||||
|
jsr callirq_y
|
||||||
|
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
|
||||||
|
@L1: pla
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
rts
|
95
libsrc/gamate/joy/gamate-stdjoy.s
Normal file
95
libsrc/gamate/joy/gamate-stdjoy.s
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
|
||||||
|
;
|
||||||
|
; Standard joystick driver for the Gamate
|
||||||
|
;
|
||||||
|
|
||||||
|
.include "joy-kernel.inc"
|
||||||
|
.include "joy-error.inc"
|
||||||
|
.include "gamate.inc"
|
||||||
|
|
||||||
|
.macpack module
|
||||||
|
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Header. Includes jump table
|
||||||
|
|
||||||
|
module_header _gamate_stdjoy_joy
|
||||||
|
|
||||||
|
; Driver signature
|
||||||
|
|
||||||
|
.byte $6A, $6F, $79 ; "joy"
|
||||||
|
.byte JOY_API_VERSION ; Driver API version number
|
||||||
|
|
||||||
|
; Library reference
|
||||||
|
|
||||||
|
.addr $0000
|
||||||
|
|
||||||
|
; Button state masks (8 values)
|
||||||
|
|
||||||
|
.byte $01 ; JOY_UP
|
||||||
|
.byte $02 ; JOY_DOWN
|
||||||
|
.byte $04 ; JOY_LEFT
|
||||||
|
.byte $08 ; JOY_RIGHT
|
||||||
|
.byte $10 ; JOY_FIRE_A
|
||||||
|
.byte $20 ; JOY_FIRE_B
|
||||||
|
.byte $80 ; JOY_SELECT
|
||||||
|
.byte $40 ; JOY_START
|
||||||
|
|
||||||
|
; Jump table.
|
||||||
|
|
||||||
|
.addr INSTALL
|
||||||
|
.addr UNINSTALL
|
||||||
|
.addr COUNT
|
||||||
|
.addr READJOY
|
||||||
|
.addr 0 ; IRQ entry unused
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Constants
|
||||||
|
|
||||||
|
JOY_COUNT = 1 ; Number of joysticks we support
|
||||||
|
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; INSTALL routine. Is called after the driver is loaded into memory. If
|
||||||
|
; possible, check if the hardware is present and determine the amount of
|
||||||
|
; memory available.
|
||||||
|
; Must return an JOY_ERR_xx code in a/x.
|
||||||
|
;
|
||||||
|
|
||||||
|
INSTALL:
|
||||||
|
lda #<JOY_ERR_OK
|
||||||
|
ldx #>JOY_ERR_OK
|
||||||
|
|
||||||
|
; rts ; Run into UNINSTALL instead
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; DEINSTALL routine. Is called before the driver is removed from memory.
|
||||||
|
; Can do cleanup or whatever. Must not return anything.
|
||||||
|
;
|
||||||
|
|
||||||
|
UNINSTALL:
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; COUNT: Return the total number of available joysticks in a/x.
|
||||||
|
;
|
||||||
|
;unsigned char __fastcall__ joy_count (void);
|
||||||
|
|
||||||
|
COUNT:
|
||||||
|
lda #<JOY_COUNT
|
||||||
|
ldx #>JOY_COUNT
|
||||||
|
rts
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; READ: Read a particular joystick passed in A.
|
||||||
|
;
|
||||||
|
;unsigned char __fastcall__ joy_read (unsigned char joystick);
|
||||||
|
|
||||||
|
READJOY:
|
||||||
|
lda JOY_DATA
|
||||||
|
ldx #0
|
||||||
|
rts
|
||||||
|
|
14
libsrc/gamate/joy_stat_stddrv.s
Normal file
14
libsrc/gamate/joy_stat_stddrv.s
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
;
|
||||||
|
; Address of the static standard joystick driver
|
||||||
|
;
|
||||||
|
; Oliver Schmidt, 2012-11-01
|
||||||
|
;
|
||||||
|
; const void joy_static_stddrv[];
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _joy_static_stddrv
|
||||||
|
.import _gamate_stdjoy_joy
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
|
||||||
|
_joy_static_stddrv := _gamate_stdjoy_joy
|
13
libsrc/gamate/joy_stddrv.s
Normal file
13
libsrc/gamate/joy_stddrv.s
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
;
|
||||||
|
; Name of the standard joystick driver
|
||||||
|
;
|
||||||
|
; Oliver Schmidt, 2012-11-01
|
||||||
|
;
|
||||||
|
; const char joy_stddrv[];
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _joy_stddrv
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
|
||||||
|
_joy_stddrv: .asciiz "gamate-stdjoy.joy"
|
32
libsrc/gamate/kplot.s
Normal file
32
libsrc/gamate/kplot.s
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
.export PLOT
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
PLOT:
|
||||||
|
bcs @getpos
|
||||||
|
|
||||||
|
sty LCD_X
|
||||||
|
;clc ; already cleared
|
||||||
|
lda _plotlo,x
|
||||||
|
sta LCD_Y
|
||||||
|
|
||||||
|
@getpos:
|
||||||
|
ldx CURS_Y
|
||||||
|
ldy CURS_X
|
||||||
|
rts
|
||||||
|
|
||||||
|
.export _plotlo
|
||||||
|
.rodata
|
||||||
|
|
||||||
|
_plotlo:
|
||||||
|
.repeat screenrows,line
|
||||||
|
.byte <($0000+(line*$8))
|
||||||
|
.endrepeat
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; force the init constructor to be imported
|
||||||
|
|
||||||
|
.import initconio
|
||||||
|
conio_init = initconio
|
8
libsrc/gamate/libref.s
Normal file
8
libsrc/gamate/libref.s
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
;
|
||||||
|
; Oliver Schmidt, 2013-05-31
|
||||||
|
;
|
||||||
|
|
||||||
|
.export joy_libref
|
||||||
|
.import _exit
|
||||||
|
|
||||||
|
joy_libref := _exit
|
28
libsrc/gamate/revers.s
Normal file
28
libsrc/gamate/revers.s
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.export _revers
|
||||||
|
|
||||||
|
.proc _revers
|
||||||
|
|
||||||
|
ldx #$00 ; Assume revers off
|
||||||
|
tay ; Test onoff
|
||||||
|
beq L1 ; Jump if off
|
||||||
|
ldx #$ff ; Load on value
|
||||||
|
ldy #$00 ; Assume old value is zero
|
||||||
|
L1: lda RVS ; Load old value
|
||||||
|
stx RVS ; Set new value
|
||||||
|
beq L2 ; Jump if old value zero
|
||||||
|
iny ; Make old value = 1
|
||||||
|
L2: ldx #$00 ; Load high byte of result
|
||||||
|
tya ; Load low byte, set CC
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; force the init constructor to be imported
|
||||||
|
|
||||||
|
.import initconio
|
||||||
|
conio_init = initconio
|
17
libsrc/gamate/ticktock.s
Normal file
17
libsrc/gamate/ticktock.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.interruptor ticktock, 24
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
ticktock:
|
||||||
|
|
||||||
|
; Increment the system tick counter.
|
||||||
|
inc tickcount
|
||||||
|
bne @s1
|
||||||
|
inc tickcount+1
|
||||||
|
bne @s1
|
||||||
|
inc tickcount+2
|
||||||
|
bne @s1
|
||||||
|
inc tickcount+3
|
||||||
|
@s1:
|
||||||
|
rts
|
228
libsrc/gamate/vga.inc
Normal file
228
libsrc/gamate/vga.inc
Normal file
|
@ -0,0 +1,228 @@
|
||||||
|
|
||||||
|
; VGA charset for the PC-Engine conio implementation
|
||||||
|
|
||||||
|
.byte $00, $00, $00, $00, $00, $00, $00, $00
|
||||||
|
; 1
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %11111111
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
; 2
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
; 3
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %11111111
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
; 4
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00011111
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
; 5
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %11110000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
; 6
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00011111
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
; 7
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %11110000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
; 8
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %11111111
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
; 9
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %11111111
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
; 10 (LF)
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
.byte %00000000
|
||||||
|
; 11
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %11110000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
; 12
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00011111
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
.byte %00010000
|
||||||
|
|
||||||
|
.byte $3F, $33, $3F, $30, $30, $70, $F0, $E0
|
||||||
|
.byte $7F, $63, $7F, $63, $63, $67, $E6, $C0
|
||||||
|
.byte $99, $5A, $3C, $E7, $E7, $3C, $5A, $99
|
||||||
|
.byte $80, $E0, $F8, $FE, $F8, $E0, $80, $00
|
||||||
|
.byte $02, $0E, $3E, $FE, $3E, $0E, $02, $00
|
||||||
|
.byte $18, $3C, $7E, $18, $18, $7E, $3C, $18
|
||||||
|
.byte $66, $66, $66, $66, $66, $00, $66, $00
|
||||||
|
.byte $7F, $DB, $DB, $7B, $1B, $1B, $1B, $00
|
||||||
|
.byte $3E, $63, $38, $6C, $6C, $38, $CC, $78
|
||||||
|
.byte $00, $00, $00, $00, $7E, $7E, $7E, $00
|
||||||
|
.byte $18, $3C, $7E, $18, $7E, $3C, $18, $FF
|
||||||
|
.byte $18, $3C, $7E, $18, $18, $18, $18, $00
|
||||||
|
.byte $18, $18, $18, $18, $7E, $3C, $18, $00
|
||||||
|
.byte $00, $18, $0C, $FE, $0C, $18, $00, $00
|
||||||
|
.byte $00, $30, $60, $FE, $60, $30, $00, $00
|
||||||
|
.byte $00, $00, $C0, $C0, $C0, $FE, $00, $00
|
||||||
|
.byte $00, $24, $66, $FF, $66, $24, $00, $00
|
||||||
|
.byte $00, $18, $3C, $7E, $FF, $FF, $00, $00
|
||||||
|
.byte $00, $FF, $FF, $7E, $3C, $18, $00, $00
|
||||||
|
.byte $00, $00, $00, $00, $00, $00, $00, $00
|
||||||
|
.byte $30, $78, $78, $78, $30, $00, $30, $00
|
||||||
|
.byte $6C, $6C, $6C, $00, $00, $00, $00, $00
|
||||||
|
.byte $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00
|
||||||
|
.byte $30, $7C, $C0, $78, $0C, $F8, $30, $00
|
||||||
|
.byte $00, $C6, $CC, $18, $30, $66, $C6, $00
|
||||||
|
.byte $38, $6C, $38, $76, $DC, $CC, $76, $00
|
||||||
|
.byte $60, $60, $C0, $00, $00, $00, $00, $00
|
||||||
|
.byte $18, $30, $60, $60, $60, $30, $18, $00
|
||||||
|
.byte $60, $30, $18, $18, $18, $30, $60, $00
|
||||||
|
.byte $00, $66, $3C, $FF, $3C, $66, $00, $00
|
||||||
|
.byte $00, $30, $30, $FC, $30, $30, $00, $00
|
||||||
|
.byte $00, $00, $00, $00, $00, $30, $30, $60
|
||||||
|
.byte $00, $00, $00, $FC, $00, $00, $00, $00
|
||||||
|
.byte $00, $00, $00, $00, $00, $30, $30, $00
|
||||||
|
.byte $06, $0C, $18, $30, $60, $C0, $80, $00
|
||||||
|
.byte $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00
|
||||||
|
.byte $30, $70, $30, $30, $30, $30, $FC, $00
|
||||||
|
.byte $78, $CC, $0C, $38, $60, $CC, $FC, $00
|
||||||
|
.byte $78, $CC, $0C, $38, $0C, $CC, $78, $00
|
||||||
|
.byte $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00
|
||||||
|
.byte $FC, $C0, $F8, $0C, $0C, $CC, $78, $00
|
||||||
|
.byte $38, $60, $C0, $F8, $CC, $CC, $78, $00
|
||||||
|
.byte $FC, $CC, $0C, $18, $30, $30, $30, $00
|
||||||
|
.byte $78, $CC, $CC, $78, $CC, $CC, $78, $00
|
||||||
|
.byte $78, $CC, $CC, $7C, $0C, $18, $70, $00
|
||||||
|
.byte $00, $30, $30, $00, $00, $30, $30, $00
|
||||||
|
.byte $00, $30, $30, $00, $00, $30, $30, $60
|
||||||
|
.byte $18, $30, $60, $C0, $60, $30, $18, $00
|
||||||
|
.byte $00, $00, $FC, $00, $00, $FC, $00, $00
|
||||||
|
.byte $60, $30, $18, $0C, $18, $30, $60, $00
|
||||||
|
.byte $78, $CC, $0C, $18, $30, $00, $30, $00
|
||||||
|
.byte $7C, $C6, $DE, $DE, $DE, $C0, $78, $00
|
||||||
|
.byte $30, $78, $CC, $CC, $FC, $CC, $CC, $00
|
||||||
|
.byte $FC, $66, $66, $7C, $66, $66, $FC, $00
|
||||||
|
.byte $3C, $66, $C0, $C0, $C0, $66, $3C, $00
|
||||||
|
.byte $F8, $6C, $66, $66, $66, $6C, $F8, $00
|
||||||
|
.byte $7E, $60, $60, $78, $60, $60, $7E, $00
|
||||||
|
.byte $7E, $60, $60, $78, $60, $60, $60, $00
|
||||||
|
.byte $3C, $66, $C0, $C0, $CE, $66, $3E, $00
|
||||||
|
.byte $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00
|
||||||
|
.byte $78, $30, $30, $30, $30, $30, $78, $00
|
||||||
|
.byte $1E, $0C, $0C, $0C, $CC, $CC, $78, $00
|
||||||
|
.byte $E6, $66, $6C, $78, $6C, $66, $E6, $00
|
||||||
|
.byte $60, $60, $60, $60, $60, $60, $7E, $00
|
||||||
|
.byte $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00
|
||||||
|
.byte $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00
|
||||||
|
.byte $38, $6C, $C6, $C6, $C6, $6C, $38, $00
|
||||||
|
.byte $FC, $66, $66, $7C, $60, $60, $F0, $00
|
||||||
|
.byte $78, $CC, $CC, $CC, $DC, $78, $1C, $00
|
||||||
|
.byte $FC, $66, $66, $7C, $6C, $66, $E6, $00
|
||||||
|
.byte $78, $CC, $E0, $70, $1C, $CC, $78, $00
|
||||||
|
.byte $FC, $30, $30, $30, $30, $30, $30, $00
|
||||||
|
.byte $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00
|
||||||
|
.byte $CC, $CC, $CC, $CC, $CC, $78, $30, $00
|
||||||
|
.byte $C6, $C6, $C6, $D6, $FE, $EE, $C6, $00
|
||||||
|
.byte $C6, $C6, $6C, $38, $38, $6C, $C6, $00
|
||||||
|
.byte $CC, $CC, $CC, $78, $30, $30, $78, $00
|
||||||
|
.byte $FE, $06, $0C, $18, $30, $60, $FE, $00
|
||||||
|
.byte $78, $60, $60, $60, $60, $60, $78, $00
|
||||||
|
.byte $C0, $60, $30, $18, $0C, $06, $02, $00
|
||||||
|
.byte $78, $18, $18, $18, $18, $18, $78, $00
|
||||||
|
.byte $10, $38, $6C, $C6, $00, $00, $00, $00
|
||||||
|
.byte $00, $00, $00, $00, $00, $00, $00, $FF
|
||||||
|
.byte $30, $30, $18, $00, $00, $00, $00, $00
|
||||||
|
.byte $00, $00, $78, $0C, $7C, $CC, $76, $00
|
||||||
|
.byte $E0, $60, $60, $7C, $66, $66, $DC, $00
|
||||||
|
.byte $00, $00, $78, $CC, $C0, $CC, $78, $00
|
||||||
|
.byte $1C, $0C, $0C, $7C, $CC, $CC, $76, $00
|
||||||
|
.byte $00, $00, $78, $CC, $FC, $C0, $78, $00
|
||||||
|
.byte $38, $6C, $60, $F0, $60, $60, $F0, $00
|
||||||
|
.byte $00, $00, $76, $CC, $CC, $7C, $0C, $F8
|
||||||
|
.byte $E0, $60, $6C, $76, $66, $66, $E6, $00
|
||||||
|
.byte $30, $00, $70, $30, $30, $30, $78, $00
|
||||||
|
.byte $0C, $00, $0C, $0C, $0C, $CC, $CC, $78
|
||||||
|
.byte $E0, $60, $66, $6C, $78, $6C, $E6, $00
|
||||||
|
.byte $70, $30, $30, $30, $30, $30, $78, $00
|
||||||
|
.byte $00, $00, $CC, $FE, $FE, $D6, $C6, $00
|
||||||
|
.byte $00, $00, $F8, $CC, $CC, $CC, $CC, $00
|
||||||
|
.byte $00, $00, $78, $CC, $CC, $CC, $78, $00
|
||||||
|
.byte $00, $00, $DC, $66, $66, $7C, $60, $F0
|
||||||
|
.byte $00, $00, $76, $CC, $CC, $7C, $0C, $1E
|
||||||
|
.byte $00, $00, $DC, $76, $66, $60, $F0, $00
|
||||||
|
.byte $00, $00, $7C, $C0, $78, $0C, $F8, $00
|
||||||
|
.byte $10, $30, $7C, $30, $30, $34, $18, $00
|
||||||
|
.byte $00, $00, $CC, $CC, $CC, $CC, $76, $00
|
||||||
|
.byte $00, $00, $CC, $CC, $CC, $78, $30, $00
|
||||||
|
.byte $00, $00, $C6, $D6, $FE, $FE, $6C, $00
|
||||||
|
.byte $00, $00, $C6, $6C, $38, $6C, $C6, $00
|
||||||
|
.byte $00, $00, $CC, $CC, $CC, $7C, $0C, $F8
|
||||||
|
.byte $00, $00, $FC, $98, $30, $64, $FC, $00
|
||||||
|
.byte $1C, $30, $30, $E0, $30, $30, $1C, $00
|
||||||
|
.byte $18, $18, $18, $00, $18, $18, $18, $00
|
||||||
|
.byte $E0, $30, $30, $1C, $30, $30, $E0, $00
|
||||||
|
.byte $76, $DC, $00, $00, $00, $00, $00, $00
|
||||||
|
.byte $00, $10, $38, $6C, $C6, $C6, $FE, $00
|
20
libsrc/gamate/waitvblank.s
Normal file
20
libsrc/gamate/waitvblank.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
;
|
||||||
|
; void waitvblank (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.forceimport ticktock
|
||||||
|
.export _waitvblank
|
||||||
|
|
||||||
|
; FIXME: is this actually correct?
|
||||||
|
|
||||||
|
.proc _waitvblank
|
||||||
|
|
||||||
|
lda tickcount
|
||||||
|
@lp: cmp tickcount
|
||||||
|
beq @lp
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endproc
|
20
libsrc/gamate/wherex.s
Normal file
20
libsrc/gamate/wherex.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 2003-05-02
|
||||||
|
;
|
||||||
|
; unsigned char wherex (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _wherex
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.proc _wherex
|
||||||
|
|
||||||
|
lda CURS_X
|
||||||
|
ldx #$00
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
20
libsrc/gamate/wherey.s
Normal file
20
libsrc/gamate/wherey.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 2003-05-02
|
||||||
|
;
|
||||||
|
; unsigned char wherey (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _wherey
|
||||||
|
|
||||||
|
.include "gamate.inc"
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
.proc _wherey
|
||||||
|
|
||||||
|
lda CURS_Y
|
||||||
|
ldx #$00
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
|
@ -205,7 +205,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = {
|
||||||
{ "sim6502", CPU_6502, BINFMT_BINARY, CTNone },
|
{ "sim6502", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
{ "sim65c02", CPU_65C02, BINFMT_BINARY, CTNone },
|
{ "sim65c02", CPU_65C02, BINFMT_BINARY, CTNone },
|
||||||
{ "pce", CPU_HUC6280, BINFMT_BINARY, CTNone },
|
{ "pce", CPU_HUC6280, BINFMT_BINARY, CTNone },
|
||||||
{ "gamate", CPU_65C02, BINFMT_BINARY, CTNone },
|
{ "gamate", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Target system */
|
/* Target system */
|
||||||
|
|
|
@ -14,6 +14,14 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#if defined(__GAMATE__)
|
||||||
|
#define NUMCHARS 128
|
||||||
|
#define NUMCOLS 4
|
||||||
|
#else
|
||||||
|
#define NUMCHARS 256
|
||||||
|
#define NUMCOLS 16
|
||||||
|
#endif
|
||||||
|
|
||||||
static char grid[5][5] = {
|
static char grid[5][5] = {
|
||||||
{ CH_ULCORNER, CH_HLINE, CH_TTEE, CH_HLINE, CH_URCORNER },
|
{ CH_ULCORNER, CH_HLINE, CH_TTEE, CH_HLINE, CH_URCORNER },
|
||||||
{ CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE },
|
{ CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE },
|
||||||
|
@ -29,8 +37,10 @@ void main(void)
|
||||||
|
|
||||||
clrscr();
|
clrscr();
|
||||||
screensize(&xsize, &ysize);
|
screensize(&xsize, &ysize);
|
||||||
cputs("cc65 conio test\n\rInput: [ ]");
|
cputs("cc65 conio test\n\r");
|
||||||
|
#if !defined(__NES__) && !defined(__PCE__) && !defined(__GAMATE__)
|
||||||
|
cputs("Input: [ ]");
|
||||||
|
#endif
|
||||||
cputsxy(0, 2, "Colors:" );
|
cputsxy(0, 2, "Colors:" );
|
||||||
tcol = textcolor(0); /* remember original textcolor */
|
tcol = textcolor(0); /* remember original textcolor */
|
||||||
bgcol = bgcolor(0); /* remember original background color */
|
bgcol = bgcolor(0); /* remember original background color */
|
||||||
|
@ -38,14 +48,14 @@ void main(void)
|
||||||
bgcolor(bgcol);bordercolor(bcol);
|
bgcolor(bgcol);bordercolor(bcol);
|
||||||
for (i = 0; i < 3; ++i) {
|
for (i = 0; i < 3; ++i) {
|
||||||
gotoxy(i,3 + i);
|
gotoxy(i,3 + i);
|
||||||
for (j = 0; j < 16; ++j) {
|
for (j = 0; j < NUMCOLS; ++j) {
|
||||||
textcolor(j);
|
textcolor(j);
|
||||||
cputc('X');
|
cputc('X');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
textcolor(tcol);
|
textcolor(tcol);
|
||||||
|
|
||||||
cprintf("\n\n\r Screensize is: %dx%d", xsize, ysize );
|
cprintf("\n\n\r Screensize: %dx%d", xsize, ysize );
|
||||||
|
|
||||||
chlinexy(0,6,xsize);
|
chlinexy(0,6,xsize);
|
||||||
cvlinexy(0,6,3);
|
cvlinexy(0,6,3);
|
||||||
|
@ -63,13 +73,13 @@ void main(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gotoxy(0,ysize - 2 - ((256 + xsize) / xsize));
|
gotoxy(0,ysize - 2 - ((NUMCHARS + xsize) / xsize));
|
||||||
revers(1);
|
revers(1);
|
||||||
for (i = 0; i < xsize; ++i) {
|
for (i = 0; i < xsize; ++i) {
|
||||||
cputc('0' + i % 10);
|
cputc('0' + i % 10);
|
||||||
}
|
}
|
||||||
revers(0);
|
revers(0);
|
||||||
for (i = 0; i < 256; ++i) {
|
for (i = 0; i < NUMCHARS; ++i) {
|
||||||
if ((i != '\n') && (i != '\r')) {
|
if ((i != '\n') && (i != '\r')) {
|
||||||
cputc(i);
|
cputc(i);
|
||||||
} else {
|
} else {
|
||||||
|
@ -89,13 +99,14 @@ void main(void)
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
|
||||||
gotoxy(8, 2);
|
gotoxy(8, 2);
|
||||||
j = n & 1;
|
j = n >> 4 & 1;
|
||||||
revers(j);
|
revers(j);
|
||||||
cputc(j ? 'R' : ' ');
|
cputc(j ? 'R' : ' ');
|
||||||
revers(j ^ 1);
|
revers(j ^ 1);
|
||||||
cputs(" revers");
|
cputs(" rvs");
|
||||||
revers(0);
|
revers(0);
|
||||||
|
|
||||||
|
#if !defined(__NES__) && !defined(__PCE__) && !defined(__GAMATE__)
|
||||||
gotoxy(8 + inpos,1);
|
gotoxy(8 + inpos,1);
|
||||||
i = cgetc();
|
i = cgetc();
|
||||||
if ((i >= '0') && (i<='9')) {
|
if ((i >= '0') && (i<='9')) {
|
||||||
|
@ -120,6 +131,10 @@ void main(void)
|
||||||
cputc(i);
|
cputc(i);
|
||||||
inpos = (inpos + 1) & 7;
|
inpos = (inpos + 1) & 7;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__)
|
||||||
|
waitvblank();
|
||||||
|
#endif
|
||||||
|
|
||||||
++n;
|
++n;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
|
|
||||||
all: audiotest.bin lcdtest.bin
|
all: audiotest.bin lcdtest.bin ctest.bin
|
||||||
|
|
||||||
audiotest.bin: audiotest.s
|
audiotest.bin: audiotest.s
|
||||||
# ../../../bin/ca65 -t gamate -o audiotest.o audiotest.s
|
../../../bin/cl65 -l audiotest.lst -t gamate -o audiotest.bin audiotest.s
|
||||||
# ../../../bin/ld65 -t gamate -o audiotest.bin audiotest.o
|
|
||||||
../../../bin/cl65 -t gamate -o audiotest.bin audiotest.s
|
|
||||||
|
|
||||||
lcdtest.bin: lcdtest.s
|
lcdtest.bin: lcdtest.s
|
||||||
# ../../../bin/ca65 -t gamate -o lcdtest.o lcdtest.s
|
../../../bin/cl65 -l lcdtest.lst -t gamate -o lcdtest.bin lcdtest.s
|
||||||
# ../../../bin/ld65 -t gamate -o lcdtest.bin lcdtest.o
|
ctest.bin: ctest.c
|
||||||
../../../bin/cl65 -l bla.lst -t gamate -o lcdtest.bin lcdtest.s
|
../../../bin/cl65 -l ctest.lst -t gamate -o ctest.bin ctest.c
|
||||||
|
|
||||||
test1: lcdtest.bin
|
test1: lcdtest.bin
|
||||||
cd /home/groepaz/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart /home/groepaz/Desktop/cc65/github/cc65/testcode/lib/gamate/lcdtest.bin
|
cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/lcdtest.bin
|
||||||
test2: audiotest.bin
|
test2: audiotest.bin
|
||||||
cd /home/groepaz/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart /home/groepaz/Desktop/cc65/github/cc65/testcode/lib/gamate/audiotest.bin
|
cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/audiotest.bin
|
||||||
|
testc: ctest.bin
|
||||||
|
cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/ctest.bin
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f lcdtest.o audiotest.o
|
rm -f lcdtest.o audiotest.o ctest.o
|
||||||
rm -f lcdtest.bin audiotest.bin
|
rm -f lcdtest.bin audiotest.bin ctest.bin
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
|
||||||
.export reset, irq, nmi ; FIXME
|
; .export reset, irq, nmi ; FIXME
|
||||||
|
.export _main
|
||||||
|
|
||||||
.include "gamate.inc"
|
.include "gamate.inc"
|
||||||
.zeropage
|
|
||||||
|
.zeropage
|
||||||
addr: .word 0
|
addr: .word 0
|
||||||
psa: .word 0
|
psa: .word 0
|
||||||
|
|
||||||
|
@ -16,7 +18,7 @@ cursor: .byte 0
|
||||||
controlslast: .byte 0
|
controlslast: .byte 0
|
||||||
controlsedge: .byte 0
|
controlsedge: .byte 0
|
||||||
|
|
||||||
.data
|
.data
|
||||||
temp_x: .byte 0
|
temp_x: .byte 0
|
||||||
temp_y: .byte 0
|
temp_y: .byte 0
|
||||||
temp_a: .byte 0
|
temp_a: .byte 0
|
||||||
|
@ -27,405 +29,414 @@ psy: .byte 0
|
||||||
xpos: .byte 0
|
xpos: .byte 0
|
||||||
ypos: .byte 0
|
ypos: .byte 0
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
chars:
|
chars:
|
||||||
.incbin "cga2.chr"
|
.incbin "cga2.chr"
|
||||||
|
|
||||||
hex2asc: .byte "0123456789abcdef"
|
hex2asc: .byte "0123456789abcdef"
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
.export IRQStub
|
||||||
|
|
||||||
.proc nmi
|
.proc nmi
|
||||||
inc nmi_count
|
inc nmi_count
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc irq
|
.proc IRQStub
|
||||||
inc irq_count
|
inc irq_count
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc reset
|
;-------------------------------------------------------------------------------
|
||||||
lda #>audio_base
|
|
||||||
sta writeaddr+1
|
|
||||||
sta readaddr+1
|
|
||||||
lda #<audio_base
|
|
||||||
sta writeaddr
|
|
||||||
sta readaddr
|
|
||||||
|
|
||||||
lda #$10
|
.proc _main
|
||||||
sta editbuffer1+6
|
lda #>AUDIO_BASE
|
||||||
lda #$e
|
sta writeaddr+1
|
||||||
sta editbuffer2+5
|
sta readaddr+1
|
||||||
lda #$ff
|
lda #<AUDIO_BASE
|
||||||
sta editbuffer2+3
|
sta writeaddr
|
||||||
lda #$ff
|
sta readaddr
|
||||||
sta editbuffer2+4
|
|
||||||
lda #$0f
|
|
||||||
sta editbuffer2
|
|
||||||
lda #$0f
|
|
||||||
sta editbuffer2+1
|
|
||||||
lda #$0e
|
|
||||||
sta editbuffer2+2
|
|
||||||
lda #$38
|
|
||||||
sta editbuffer1+7
|
|
||||||
|
|
||||||
lda #0
|
lda #$10
|
||||||
sta lcd_x_pos
|
sta editbuffer1+6
|
||||||
sta lcd_y_pos
|
lda #$e
|
||||||
sta irq_count
|
sta editbuffer2+5
|
||||||
sta cursor
|
lda #$ff
|
||||||
lda #1
|
sta editbuffer2+3
|
||||||
sta nmi_count
|
lda #$ff
|
||||||
cli
|
sta editbuffer2+4
|
||||||
lda #lcd_mode_y_increment
|
lda #$0f
|
||||||
sta lcd_mode
|
sta editbuffer2
|
||||||
|
lda #$0f
|
||||||
|
sta editbuffer2+1
|
||||||
|
lda #$0e
|
||||||
|
sta editbuffer2+2
|
||||||
|
lda #$38
|
||||||
|
sta editbuffer1+7
|
||||||
|
|
||||||
jsr printy
|
lda #0
|
||||||
|
sta LCD_XPOS
|
||||||
|
sta LCD_YPOS
|
||||||
|
sta irq_count
|
||||||
|
sta cursor
|
||||||
|
lda #1
|
||||||
|
sta nmi_count
|
||||||
|
cli
|
||||||
|
lda #LCD_MODE_INC_Y
|
||||||
|
sta LCD_MODE
|
||||||
|
|
||||||
lda #1
|
jsr printy
|
||||||
sta nmi_enable
|
|
||||||
|
lda #1
|
||||||
|
sta ZP_NMI_ENABLE
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
lda irq_count
|
lda irq_count
|
||||||
loop1:
|
loop1:
|
||||||
cmp irq_count
|
cmp irq_count
|
||||||
beq loop1
|
beq loop1
|
||||||
lda irq_count
|
lda irq_count
|
||||||
and #7
|
and #7
|
||||||
bne loop1
|
bne loop1
|
||||||
|
|
||||||
lda #lcd_mode_y_increment
|
lda #LCD_MODE_INC_Y
|
||||||
sta lcd_mode
|
sta LCD_MODE
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
ldy #32
|
ldy #32
|
||||||
lda irq_count
|
lda irq_count
|
||||||
jsr printhex
|
jsr printhex
|
||||||
|
|
||||||
|
|
||||||
lda cursor
|
lda cursor
|
||||||
ldy #0
|
ldy #0
|
||||||
cmp #20
|
cmp #20
|
||||||
bcc firstline
|
bcc firstline
|
||||||
sec
|
sec
|
||||||
sbc #20
|
sbc #20
|
||||||
ldy #24
|
ldy #24
|
||||||
firstline:
|
firstline:
|
||||||
sta lcd_x
|
sta LCD_X
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
lda #' '
|
lda #' '
|
||||||
jsr printsign
|
jsr printsign
|
||||||
norclearcursor:
|
norclearcursor:
|
||||||
|
|
||||||
jsr inputs
|
|
||||||
|
|
||||||
lda irq_count
|
jsr inputs
|
||||||
and #8
|
|
||||||
bne nocursor
|
lda irq_count
|
||||||
lda cursor
|
and #8
|
||||||
ldy #0
|
bne nocursor
|
||||||
cmp #20
|
lda cursor
|
||||||
bcc firstline2
|
ldy #0
|
||||||
sec
|
cmp #20
|
||||||
sbc #20
|
bcc firstline2
|
||||||
ldy #24
|
sec
|
||||||
|
sbc #20
|
||||||
|
ldy #24
|
||||||
firstline2:
|
firstline2:
|
||||||
sta lcd_x
|
sta LCD_X
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
lda #'x'
|
lda #'x'
|
||||||
jsr printsign
|
jsr printsign
|
||||||
nocursor:
|
nocursor:
|
||||||
|
|
||||||
lda #lcd_mode_y_increment
|
lda #LCD_MODE_INC_Y
|
||||||
sta lcd_mode
|
sta LCD_MODE
|
||||||
jsr printy
|
jsr printy
|
||||||
jmp loop
|
jmp loop
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc printy
|
.proc printy
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
loop1:
|
loop1:
|
||||||
tya
|
tya
|
||||||
pha
|
pha
|
||||||
asl
|
asl
|
||||||
tax
|
tax
|
||||||
lda readaddr,y
|
lda readaddr,y
|
||||||
ldy #8
|
ldy #8
|
||||||
jsr printhex
|
jsr printhex
|
||||||
pla
|
pla
|
||||||
tay
|
tay
|
||||||
iny
|
iny
|
||||||
cpy #10
|
cpy #10
|
||||||
bne loop1
|
bne loop1
|
||||||
|
|
||||||
loop2:
|
loop2:
|
||||||
tya
|
tya
|
||||||
pha
|
pha
|
||||||
tya
|
tya
|
||||||
sec
|
sec
|
||||||
sbc #10
|
sbc #10
|
||||||
asl
|
asl
|
||||||
tax
|
tax
|
||||||
lda readaddr,y
|
lda readaddr,y
|
||||||
ldy #16
|
ldy #16
|
||||||
jsr printhex
|
jsr printhex
|
||||||
pla
|
pla
|
||||||
tay
|
tay
|
||||||
iny
|
iny
|
||||||
cpy #20
|
cpy #20
|
||||||
bne loop2
|
bne loop2
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
ldy #32
|
ldy #32
|
||||||
lda nmi_count
|
lda nmi_count
|
||||||
jsr printhex
|
jsr printhex
|
||||||
|
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
.proc inputs
|
.proc inputs
|
||||||
lda controlslast
|
lda controlslast
|
||||||
eor controls
|
eor JOY_DATA
|
||||||
and controlslast
|
and controlslast
|
||||||
eor #$ff
|
eor #$ff
|
||||||
sta controlsedge
|
sta controlsedge
|
||||||
and #up
|
and #JOY_DATA_UP
|
||||||
bne notup
|
bne notup
|
||||||
|
|
||||||
lda cursor
|
lda cursor
|
||||||
lsr
|
lsr
|
||||||
tay
|
tay
|
||||||
bcs uplow
|
bcs uplow
|
||||||
lda readaddr,y
|
lda readaddr,y
|
||||||
clc
|
clc
|
||||||
adc #$10
|
adc #$10
|
||||||
sta readaddr,y
|
sta readaddr,y
|
||||||
jmp notup
|
jmp notup
|
||||||
uplow:lda readaddr,y
|
uplow:lda readaddr,y
|
||||||
clc
|
clc
|
||||||
adc #1
|
adc #1
|
||||||
sta readaddr,y
|
sta readaddr,y
|
||||||
notup:lda controlsedge
|
notup:lda controlsedge
|
||||||
and #down
|
and #JOY_DATA_DOWN
|
||||||
bne notdown
|
bne notdown
|
||||||
lda cursor
|
lda cursor
|
||||||
lsr
|
lsr
|
||||||
tay
|
tay
|
||||||
bcs downlow
|
bcs downlow
|
||||||
lda readaddr,y
|
lda readaddr,y
|
||||||
sec
|
sec
|
||||||
sbc #$10
|
sbc #$10
|
||||||
sta readaddr,y
|
sta readaddr,y
|
||||||
jmp notdown
|
jmp notdown
|
||||||
downlow:
|
downlow:
|
||||||
lda readaddr,y
|
lda readaddr,y
|
||||||
sec
|
sec
|
||||||
sbc #1
|
sbc #1
|
||||||
sta readaddr,y
|
sta readaddr,y
|
||||||
notdown:lda controlsedge
|
notdown:lda controlsedge
|
||||||
and #left
|
and #JOY_DATA_LEFT
|
||||||
bne notleft
|
bne notleft
|
||||||
lda cursor
|
lda cursor
|
||||||
beq notleft
|
beq notleft
|
||||||
dec cursor
|
dec cursor
|
||||||
notleft:lda controlsedge
|
notleft:lda controlsedge
|
||||||
and #right
|
and #JOY_DATA_RIGHT
|
||||||
bne notright
|
bne notright
|
||||||
lda cursor
|
lda cursor
|
||||||
cmp #40
|
cmp #40
|
||||||
beq notright
|
beq notright
|
||||||
inc cursor
|
inc cursor
|
||||||
notright:lda controlsedge
|
notright:lda controlsedge
|
||||||
and #start
|
and #JOY_DATA_START
|
||||||
bne notstart
|
bne notstart
|
||||||
lda #0
|
lda #0
|
||||||
sta audio_base
|
sta AUDIO_BASE
|
||||||
sta audio_base+1
|
sta AUDIO_BASE+1
|
||||||
sta audio_base+2
|
sta AUDIO_BASE+2
|
||||||
sta audio_base+3
|
sta AUDIO_BASE+3
|
||||||
sta audio_base+4
|
sta AUDIO_BASE+4
|
||||||
sta audio_base+5
|
sta AUDIO_BASE+5
|
||||||
sta audio_base+6
|
sta AUDIO_BASE+6
|
||||||
sta audio_base+8
|
sta AUDIO_BASE+8
|
||||||
sta audio_base+9
|
sta AUDIO_BASE+9
|
||||||
sta audio_base+10
|
sta AUDIO_BASE+10
|
||||||
sta audio_base+11
|
sta AUDIO_BASE+11
|
||||||
sta audio_base+12
|
sta AUDIO_BASE+12
|
||||||
sta audio_base+13
|
sta AUDIO_BASE+13
|
||||||
sta audio_base+7
|
sta AUDIO_BASE+7
|
||||||
notstart:lda controlsedge
|
notstart:lda controlsedge
|
||||||
and #select
|
and #JOY_DATA_SELECT
|
||||||
bne notselect
|
bne notselect
|
||||||
lda editbuffer1
|
lda editbuffer1
|
||||||
sta audio_base
|
sta AUDIO_BASE
|
||||||
lda editbuffer1+1
|
lda editbuffer1+1
|
||||||
sta audio_base+1
|
sta AUDIO_BASE+1
|
||||||
lda editbuffer1+2
|
lda editbuffer1+2
|
||||||
sta audio_base+2
|
sta AUDIO_BASE+2
|
||||||
lda editbuffer1+3
|
lda editbuffer1+3
|
||||||
sta audio_base+3
|
sta AUDIO_BASE+3
|
||||||
lda editbuffer1+4
|
lda editbuffer1+4
|
||||||
sta audio_base+4
|
sta AUDIO_BASE+4
|
||||||
lda editbuffer1+5
|
lda editbuffer1+5
|
||||||
sta audio_base+5
|
sta AUDIO_BASE+5
|
||||||
lda editbuffer1+6
|
lda editbuffer1+6
|
||||||
sta audio_base+6
|
sta AUDIO_BASE+6
|
||||||
lda editbuffer2
|
lda editbuffer2
|
||||||
sta audio_base+8
|
sta AUDIO_BASE+8
|
||||||
lda editbuffer2+1
|
lda editbuffer2+1
|
||||||
sta audio_base+9
|
sta AUDIO_BASE+9
|
||||||
lda editbuffer2+2
|
lda editbuffer2+2
|
||||||
sta audio_base+10
|
sta AUDIO_BASE+10
|
||||||
lda editbuffer2+3
|
lda editbuffer2+3
|
||||||
sta audio_base+11
|
sta AUDIO_BASE+11
|
||||||
lda editbuffer2+4
|
lda editbuffer2+4
|
||||||
sta audio_base+12
|
sta AUDIO_BASE+12
|
||||||
lda editbuffer2+5
|
lda editbuffer2+5
|
||||||
sta audio_base+13
|
sta AUDIO_BASE+13
|
||||||
lda editbuffer1+7
|
lda editbuffer1+7
|
||||||
sta audio_base+7
|
sta AUDIO_BASE+7
|
||||||
notselect:lda controlsedge
|
notselect:lda controlsedge
|
||||||
and #button_a
|
and #JOY_DATA_FIRE_A
|
||||||
bne notbuttona
|
bne notbuttona
|
||||||
ldy #0
|
ldy #0
|
||||||
ldy #0
|
ldy #0
|
||||||
writea:lda editbuffer1,y
|
writea:lda editbuffer1,y
|
||||||
sta (writeaddr),y
|
sta (writeaddr),y
|
||||||
iny
|
iny
|
||||||
cpy #8
|
cpy #8
|
||||||
bne writea
|
bne writea
|
||||||
writeb:lda editbuffer2-8,y
|
writeb:lda editbuffer2-8,y
|
||||||
sta (writeaddr),y
|
sta (writeaddr),y
|
||||||
iny
|
iny
|
||||||
cpy #16
|
cpy #16
|
||||||
bne writeb
|
bne writeb
|
||||||
notbuttona:lda controlsedge
|
notbuttona:lda controlsedge
|
||||||
and #button_b
|
and #JOY_DATA_FIRE_B
|
||||||
bne notbuttonb
|
bne notbuttonb
|
||||||
ldy #0
|
ldy #0
|
||||||
reada:lda (readaddr),y
|
reada:lda (readaddr),y
|
||||||
sta editbuffer1,y
|
sta editbuffer1,y
|
||||||
iny
|
iny
|
||||||
cpy #8
|
cpy #8
|
||||||
bne reada
|
bne reada
|
||||||
readb:lda (readaddr),y
|
readb:lda (readaddr),y
|
||||||
sta editbuffer2-8,y
|
sta editbuffer2-8,y
|
||||||
iny
|
iny
|
||||||
cpy #16
|
cpy #16
|
||||||
bne readb
|
bne readb
|
||||||
notbuttonb:
|
notbuttonb:
|
||||||
lda controls
|
lda JOY_DATA
|
||||||
sta controlslast
|
sta controlslast
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
.proc printstring
|
.proc printstring
|
||||||
sta psa
|
sta psa
|
||||||
stx psa+1
|
stx psa+1
|
||||||
ldx #0
|
ldx #0
|
||||||
stx psx
|
stx psx
|
||||||
sty psy
|
sty psy
|
||||||
printstring2:
|
printstring2:
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (psa),y
|
lda (psa),y
|
||||||
beq printstring1
|
beq printstring1
|
||||||
ldx psx
|
ldx psx
|
||||||
stx lcd_x
|
stx LCD_X
|
||||||
ldy psy
|
ldy psy
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
jsr printsign
|
jsr printsign
|
||||||
inc psx
|
inc psx
|
||||||
lda psa
|
lda psa
|
||||||
clc
|
clc
|
||||||
adc #1
|
adc #1
|
||||||
sta psa
|
sta psa
|
||||||
lda psa+1
|
lda psa+1
|
||||||
adc #0
|
adc #0
|
||||||
sta psa+1
|
sta psa+1
|
||||||
jmp printstring2
|
jmp printstring2
|
||||||
printstring1:
|
printstring1:
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc printstringy
|
.proc printstringy
|
||||||
sta psa
|
sta psa
|
||||||
stx psa+1
|
stx psa+1
|
||||||
printstring2:
|
printstring2:
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (psa),y
|
lda (psa),y
|
||||||
beq printstring1
|
beq printstring1
|
||||||
jsr printsign
|
jsr printsign
|
||||||
lda psa
|
lda psa
|
||||||
clc
|
clc
|
||||||
adc #1
|
adc #1
|
||||||
sta psa
|
sta psa
|
||||||
lda psa+1
|
lda psa+1
|
||||||
adc #0
|
adc #0
|
||||||
sta psa+1
|
sta psa+1
|
||||||
jmp printstring2
|
jmp printstring2
|
||||||
printstring1:
|
printstring1:
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
.proc printhex
|
.proc printhex
|
||||||
pha
|
pha
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
and #$0f
|
and #$0f
|
||||||
stx temp_x
|
stx temp_x
|
||||||
tax
|
tax
|
||||||
lda hex2asc,x
|
lda hex2asc,x
|
||||||
ldx temp_x
|
ldx temp_x
|
||||||
stx lcd_x
|
stx LCD_X
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
jsr printsign
|
jsr printsign
|
||||||
pla
|
pla
|
||||||
and #$0f
|
and #$0f
|
||||||
inx
|
inx
|
||||||
stx temp_x
|
stx temp_x
|
||||||
tax
|
tax
|
||||||
lda hex2asc,x
|
lda hex2asc,x
|
||||||
ldx temp_x
|
ldx temp_x
|
||||||
stx lcd_x
|
stx LCD_X
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
jmp printsign
|
jmp printsign
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc printsign
|
.proc printsign
|
||||||
sty temp_y
|
sty temp_y
|
||||||
stx temp_x
|
stx temp_x
|
||||||
sta temp_a
|
sta temp_a
|
||||||
lda temp_a
|
lda temp_a
|
||||||
sta addr
|
sta addr
|
||||||
lda #0
|
lda #0
|
||||||
sta addr+1
|
sta addr+1
|
||||||
asl addr
|
asl addr
|
||||||
rol addr+1
|
rol addr+1
|
||||||
asl addr
|
asl addr
|
||||||
rol addr+1
|
rol addr+1
|
||||||
asl addr
|
asl addr
|
||||||
rol addr+1
|
rol addr+1
|
||||||
lda addr
|
lda addr
|
||||||
clc
|
clc
|
||||||
adc #<chars
|
adc #<chars
|
||||||
sta addr
|
sta addr
|
||||||
lda addr+1
|
lda addr+1
|
||||||
adc #>chars
|
adc #>chars
|
||||||
sta addr+1
|
sta addr+1
|
||||||
ldx #8
|
ldx #8
|
||||||
ldy #0
|
ldy #0
|
||||||
printsign1:
|
printsign1:
|
||||||
lda (addr),y
|
lda (addr),y
|
||||||
sta lcd_data
|
sta LCD_DATA
|
||||||
iny
|
iny
|
||||||
dex
|
dex
|
||||||
bne printsign1
|
bne printsign1
|
||||||
ldx temp_x
|
ldx temp_x
|
||||||
ldy temp_y
|
ldy temp_y
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
52
testcode/lib/gamate/ctest.c
Normal file
52
testcode/lib/gamate/ctest.c
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
|
||||||
|
#include <gamate.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <conio.h>
|
||||||
|
|
||||||
|
unsigned char y = 0;
|
||||||
|
unsigned char x;
|
||||||
|
unsigned short n;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
clrscr();
|
||||||
|
gotoxy(0,0);cputs("abcdABCD");
|
||||||
|
|
||||||
|
textcolor(0);gotoxy(0,5);cputs("abcdABCD 0");
|
||||||
|
textcolor(1);gotoxy(0,6);cputs("abcdABCD 1");
|
||||||
|
textcolor(2);gotoxy(0,7);cputs("abcdABCD 2");
|
||||||
|
textcolor(3);gotoxy(0,8);cputs("abcdABCD 3");
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
textcolor(COLOR_BLACK);
|
||||||
|
|
||||||
|
n = clock();
|
||||||
|
|
||||||
|
gotoxy(0,2);cprintf("%04x %02x %02x", n, x, y);
|
||||||
|
|
||||||
|
switch((*((unsigned char*)JOY_DATA))) {
|
||||||
|
case 0xff ^ JOY_DATA_UP:
|
||||||
|
++y;
|
||||||
|
break;
|
||||||
|
case 0xff ^ JOY_DATA_DOWN:
|
||||||
|
--y;
|
||||||
|
break;
|
||||||
|
case 0xff ^ JOY_DATA_LEFT:
|
||||||
|
++x;
|
||||||
|
break;
|
||||||
|
case 0xff ^ JOY_DATA_RIGHT:
|
||||||
|
--x;
|
||||||
|
break;
|
||||||
|
case 0xff ^ JOY_DATA_FIRE_A:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*((unsigned char*)LCD_XPOS)) = x;
|
||||||
|
(*((unsigned char*)LCD_YPOS)) = y;
|
||||||
|
|
||||||
|
waitvblank();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -1,14 +1,12 @@
|
||||||
|
|
||||||
.export reset, irq, nmi ; FIXME
|
.export _main
|
||||||
|
|
||||||
|
|
||||||
.include "gamate.inc"
|
.include "gamate.inc"
|
||||||
|
|
||||||
.zeropage
|
.zeropage
|
||||||
addr: .word 0
|
addr: .word 0
|
||||||
psa: .word 0
|
psa: .word 0
|
||||||
|
|
||||||
.data
|
.data
|
||||||
temp_x: .byte 0
|
temp_x: .byte 0
|
||||||
temp_y: .byte 0
|
temp_y: .byte 0
|
||||||
temp_a: .byte 0
|
temp_a: .byte 0
|
||||||
|
@ -21,363 +19,381 @@ counted: .word 0
|
||||||
xpos: .byte 0
|
xpos: .byte 0
|
||||||
ypos: .byte 0
|
ypos: .byte 0
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
chars:
|
chars:
|
||||||
.incbin "cga2.chr"
|
.incbin "cga2.chr"
|
||||||
|
|
||||||
hex2asc: .byte "0123456789abcdef"
|
|
||||||
format: .byte "IrqNmiCountXposYpos", 0
|
|
||||||
xdesc: .byte "0123456789abcdefghijklmnopqrstuv", 0
|
|
||||||
ydesc: .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
|
|
||||||
|
|
||||||
.proc nmi
|
hex2asc: .byte "0123456789abcdef"
|
||||||
inc nmi_count
|
format: .byte "IrqNmiCountXposYpos", 0
|
||||||
rts
|
xdesc: .byte "0123456789abcdefghijklmnopqrstuv", 0
|
||||||
|
ydesc: .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.proc nmi
|
||||||
|
|
||||||
|
inc nmi_count
|
||||||
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
.export IRQStub
|
||||||
|
|
||||||
.proc irq
|
.proc IRQStub
|
||||||
inc irq_count
|
|
||||||
lda count
|
inc irq_count
|
||||||
sta counted
|
lda count
|
||||||
lda count+1
|
sta counted
|
||||||
sta counted+1
|
lda count+1
|
||||||
lda #0
|
sta counted+1
|
||||||
sta count
|
lda #0
|
||||||
sta count+1
|
sta count
|
||||||
rts
|
sta count+1
|
||||||
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc reset
|
;-------------------------------------------------------------------------------
|
||||||
lda #0
|
|
||||||
sta lcd_x_pos
|
|
||||||
sta lcd_y_pos
|
|
||||||
cli
|
|
||||||
lda #lcd_mode_y_increment
|
|
||||||
sta lcd_mode
|
|
||||||
|
|
||||||
lda #0
|
.proc _main
|
||||||
sta lcd_x
|
|
||||||
lda #<xdesc
|
|
||||||
ldx #>xdesc
|
|
||||||
ldy #0
|
|
||||||
jsr printstring
|
|
||||||
|
|
||||||
lda #lcd_x_pos_plane2_flag
|
lda #0
|
||||||
sta lcd_x
|
sta LCD_XPOS
|
||||||
lda #<xdesc
|
sta LCD_YPOS
|
||||||
ldx #>xdesc
|
cli
|
||||||
ldy #128
|
lda #LCD_MODE_INC_Y
|
||||||
jsr printstring
|
sta LCD_MODE
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta lcd_x
|
sta LCD_X
|
||||||
lda #<ydesc
|
lda #<xdesc
|
||||||
ldx #>ydesc
|
ldx #>xdesc
|
||||||
ldy #0
|
ldy #0
|
||||||
sty lcd_y
|
jsr printstring
|
||||||
jsr printstringy
|
|
||||||
|
|
||||||
; lda #$90;(lcd_x_pos_plane2_flag|(128/8))
|
lda #LCD_XPOS_PLANE2
|
||||||
lda #(lcd_x_pos_plane2_flag|(128/8))
|
sta LCD_X
|
||||||
sta lcd_x
|
lda #<xdesc
|
||||||
lda #<ydesc
|
ldx #>xdesc
|
||||||
ldx #>ydesc
|
ldy #128
|
||||||
ldy #0
|
jsr printstring
|
||||||
sty lcd_y
|
|
||||||
jsr printstringy
|
|
||||||
|
|
||||||
lda #<format
|
lda #0
|
||||||
ldx #>format
|
sta LCD_X
|
||||||
ldy #8
|
lda #<ydesc
|
||||||
jsr printstring
|
ldx #>ydesc
|
||||||
|
ldy #0
|
||||||
|
sty LCD_Y
|
||||||
|
jsr printstringy
|
||||||
|
|
||||||
lda #0
|
; lda #$90;(LCD_XPOS_PLANE2|(128/8))
|
||||||
sta lcd_mode
|
lda #(LCD_XPOS_PLANE2|(128/8))
|
||||||
lda #24/8
|
sta LCD_X
|
||||||
sta lcd_x
|
lda #<ydesc
|
||||||
lda #24
|
ldx #>ydesc
|
||||||
sta lcd_y
|
ldy #0
|
||||||
lda #'X'
|
sty LCD_Y
|
||||||
jsr printsign
|
jsr printstringy
|
||||||
lda #$80
|
|
||||||
sta lcd_mode
|
|
||||||
lda #32/8
|
|
||||||
sta lcd_x
|
|
||||||
lda #32
|
|
||||||
sta lcd_y
|
|
||||||
lda #'Y'
|
|
||||||
jsr printsign
|
|
||||||
lda #$c0
|
|
||||||
sta lcd_mode
|
|
||||||
lda #40/8
|
|
||||||
sta lcd_x
|
|
||||||
lda #40
|
|
||||||
sta lcd_y
|
|
||||||
lda #'Z'
|
|
||||||
jsr printsign
|
|
||||||
|
|
||||||
lda #0
|
lda #<format
|
||||||
sta lcd_mode
|
ldx #>format
|
||||||
lda #lcd_x_pos_plane2_flag|(48/8)
|
ldy #8
|
||||||
sta lcd_x
|
jsr printstring
|
||||||
lda #48
|
|
||||||
sta lcd_y
|
|
||||||
lda #'x'
|
|
||||||
jsr printsign
|
|
||||||
lda #$80
|
|
||||||
sta lcd_mode
|
|
||||||
lda #(lcd_x_pos_plane2_flag|(56/8))
|
|
||||||
sta lcd_x
|
|
||||||
lda #56
|
|
||||||
sta lcd_y
|
|
||||||
lda #'y'
|
|
||||||
jsr printsign
|
|
||||||
lda #$c0
|
|
||||||
sta lcd_mode
|
|
||||||
lda #(lcd_x_pos_plane2_flag|(64/8))
|
|
||||||
sta lcd_x
|
|
||||||
lda #64
|
|
||||||
sta lcd_y
|
|
||||||
lda #'z'
|
|
||||||
jsr printsign
|
|
||||||
|
|
||||||
lda #lcd_mode_y_increment|1
|
lda #0
|
||||||
sta lcd_mode
|
sta LCD_MODE
|
||||||
lda #16/8
|
lda #24/8
|
||||||
sta lcd_x
|
sta LCD_X
|
||||||
lda #72
|
lda #24
|
||||||
sta lcd_y
|
sta LCD_Y
|
||||||
lda #'V'
|
lda #'X'
|
||||||
jsr printsign
|
jsr printsign
|
||||||
lda #lcd_mode_y_increment|2
|
lda #$80
|
||||||
sta lcd_mode
|
sta LCD_MODE
|
||||||
lda #24/8
|
lda #32/8
|
||||||
sta lcd_x
|
sta LCD_X
|
||||||
lda #72
|
lda #32
|
||||||
sta lcd_y
|
sta LCD_Y
|
||||||
lda #'V'
|
lda #'Y'
|
||||||
jsr printsign
|
jsr printsign
|
||||||
lda #lcd_mode_y_increment|4
|
lda #$c0
|
||||||
sta lcd_mode
|
sta LCD_MODE
|
||||||
lda #32/8
|
lda #40/8
|
||||||
sta lcd_x
|
sta LCD_X
|
||||||
lda #72
|
lda #40
|
||||||
sta lcd_y
|
sta LCD_Y
|
||||||
lda #'V'
|
lda #'Z'
|
||||||
jsr printsign
|
jsr printsign
|
||||||
lda #lcd_mode_y_increment|8
|
|
||||||
sta lcd_mode
|
lda #0
|
||||||
lda #40/8
|
sta LCD_MODE
|
||||||
sta lcd_x
|
lda #LCD_XPOS_PLANE2|(48/8)
|
||||||
lda #72
|
sta LCD_X
|
||||||
sta lcd_y
|
lda #48
|
||||||
lda #'V'
|
sta LCD_Y
|
||||||
jsr printsign
|
lda #'x'
|
||||||
|
jsr printsign
|
||||||
|
lda #$80
|
||||||
|
sta LCD_MODE
|
||||||
|
lda #(LCD_XPOS_PLANE2|(56/8))
|
||||||
|
sta LCD_X
|
||||||
|
lda #56
|
||||||
|
sta LCD_Y
|
||||||
|
lda #'y'
|
||||||
|
jsr printsign
|
||||||
|
lda #$c0
|
||||||
|
sta LCD_MODE
|
||||||
|
lda #(LCD_XPOS_PLANE2|(64/8))
|
||||||
|
sta LCD_X
|
||||||
|
lda #64
|
||||||
|
sta LCD_Y
|
||||||
|
lda #'z'
|
||||||
|
jsr printsign
|
||||||
|
|
||||||
|
lda #LCD_MODE_INC_Y|1
|
||||||
|
sta LCD_MODE
|
||||||
|
lda #16/8
|
||||||
|
sta LCD_X
|
||||||
|
lda #72
|
||||||
|
sta LCD_Y
|
||||||
|
lda #'V'
|
||||||
|
jsr printsign
|
||||||
|
lda #LCD_MODE_INC_Y|2
|
||||||
|
sta LCD_MODE
|
||||||
|
lda #24/8
|
||||||
|
sta LCD_X
|
||||||
|
lda #72
|
||||||
|
sta LCD_Y
|
||||||
|
lda #'V'
|
||||||
|
jsr printsign
|
||||||
|
lda #LCD_MODE_INC_Y|4
|
||||||
|
sta LCD_MODE
|
||||||
|
lda #32/8
|
||||||
|
sta LCD_X
|
||||||
|
lda #72
|
||||||
|
sta LCD_Y
|
||||||
|
lda #'V'
|
||||||
|
jsr printsign
|
||||||
|
lda #LCD_MODE_INC_Y|8
|
||||||
|
sta LCD_MODE
|
||||||
|
lda #40/8
|
||||||
|
sta LCD_X
|
||||||
|
lda #72
|
||||||
|
sta LCD_Y
|
||||||
|
lda #'V'
|
||||||
|
jsr printsign
|
||||||
|
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
sta nmi_enable
|
sta ZP_NMI_ENABLE
|
||||||
|
|
||||||
loop: lda count
|
loop: lda count
|
||||||
clc
|
clc
|
||||||
adc #1
|
adc #1
|
||||||
sta count
|
sta count
|
||||||
lda count+1
|
lda count+1
|
||||||
adc #1
|
adc #1
|
||||||
sta count+1
|
sta count+1
|
||||||
lda irq_count
|
lda irq_count
|
||||||
cmp irq_count
|
cmp irq_count
|
||||||
beq loop
|
beq loop
|
||||||
|
|
||||||
jsr inputs
|
jsr inputs
|
||||||
lda #lcd_mode_y_increment
|
lda #LCD_MODE_INC_Y
|
||||||
sta lcd_mode
|
sta LCD_MODE
|
||||||
jsr printy
|
jsr printy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
jmp loop
|
jmp loop
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
.proc printy
|
.proc printy
|
||||||
ldx #0
|
ldx #0
|
||||||
ldy #16
|
ldy #16
|
||||||
lda irq_count
|
lda irq_count
|
||||||
jsr printhex
|
jsr printhex
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
ldy #16
|
ldy #16
|
||||||
lda nmi_count
|
lda nmi_count
|
||||||
jsr printhex
|
jsr printhex
|
||||||
|
|
||||||
ldx #6
|
ldx #6
|
||||||
ldy #16
|
ldy #16
|
||||||
lda counted+1
|
lda counted+1
|
||||||
jsr printhex
|
jsr printhex
|
||||||
ldx #8
|
ldx #8
|
||||||
ldy #16
|
ldy #16
|
||||||
lda counted
|
lda counted
|
||||||
jsr printhex
|
jsr printhex
|
||||||
|
|
||||||
ldx #11
|
ldx #11
|
||||||
ldy #16
|
ldy #16
|
||||||
lda xpos
|
lda xpos
|
||||||
jsr printhex
|
jsr printhex
|
||||||
ldx #14
|
ldx #14
|
||||||
ldy #16
|
ldy #16
|
||||||
lda ypos
|
lda ypos
|
||||||
jsr printhex
|
jsr printhex
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc inputs
|
.proc inputs
|
||||||
lda controls
|
lda JOY_DATA
|
||||||
and #up
|
and #JOY_DATA_UP
|
||||||
bne notup
|
bne notup
|
||||||
dec ypos
|
dec ypos
|
||||||
lda ypos
|
lda ypos
|
||||||
sta lcd_y_pos
|
sta LCD_YPOS
|
||||||
notup:lda controls
|
notup:lda JOY_DATA
|
||||||
and #down
|
and #JOY_DATA_DOWN
|
||||||
bne notdown
|
bne notdown
|
||||||
inc ypos
|
inc ypos
|
||||||
lda ypos
|
lda ypos
|
||||||
sta lcd_y_pos
|
sta LCD_YPOS
|
||||||
notdown:lda controls
|
notdown:lda JOY_DATA
|
||||||
and #left
|
and #JOY_DATA_LEFT
|
||||||
bne notleft
|
bne notleft
|
||||||
dec xpos
|
dec xpos
|
||||||
lda xpos
|
lda xpos
|
||||||
sta lcd_x_pos
|
sta LCD_XPOS
|
||||||
notleft:lda controls
|
notleft:lda JOY_DATA
|
||||||
and #right
|
and #JOY_DATA_RIGHT
|
||||||
bne notright
|
bne notright
|
||||||
inc xpos
|
inc xpos
|
||||||
lda xpos
|
lda xpos
|
||||||
sta lcd_x_pos
|
sta LCD_XPOS
|
||||||
notright:lda controls
|
notright:lda JOY_DATA
|
||||||
and #start
|
and #JOY_DATA_START
|
||||||
bne notstart
|
bne notstart
|
||||||
notstart:lda controls
|
notstart:lda JOY_DATA
|
||||||
and #select
|
and #JOY_DATA_SELECT
|
||||||
bne notselect
|
bne notselect
|
||||||
notselect:lda controls
|
notselect:lda JOY_DATA
|
||||||
and #button_a
|
and #JOY_DATA_FIRE_A
|
||||||
bne notbuttona
|
bne notbuttona
|
||||||
notbuttona:lda controls
|
notbuttona:lda JOY_DATA
|
||||||
and #button_b
|
and #JOY_DATA_FIRE_B
|
||||||
bne notbuttonb
|
bne notbuttonb
|
||||||
notbuttonb:rts
|
notbuttonb:rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
.proc printstring
|
.proc printstring
|
||||||
sta psa
|
sta psa
|
||||||
stx psa+1
|
stx psa+1
|
||||||
ldx #0
|
ldx #0
|
||||||
stx psx
|
stx psx
|
||||||
sty psy
|
sty psy
|
||||||
printstring2:
|
printstring2:
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (psa),y
|
lda (psa),y
|
||||||
beq printstring1
|
beq printstring1
|
||||||
ldx psx
|
ldx psx
|
||||||
stx lcd_x
|
stx LCD_X
|
||||||
ldy psy
|
ldy psy
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
jsr printsign
|
jsr printsign
|
||||||
inc psx
|
inc psx
|
||||||
lda psa
|
lda psa
|
||||||
clc
|
clc
|
||||||
adc #1
|
adc #1
|
||||||
sta psa
|
sta psa
|
||||||
lda psa+1
|
lda psa+1
|
||||||
adc #0
|
adc #0
|
||||||
sta psa+1
|
sta psa+1
|
||||||
jmp printstring2
|
jmp printstring2
|
||||||
printstring1:
|
printstring1:
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc printstringy
|
.proc printstringy
|
||||||
sta psa
|
sta psa
|
||||||
stx psa+1
|
stx psa+1
|
||||||
printstring2:
|
printstring2:
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (psa),y
|
lda (psa),y
|
||||||
beq printstring1
|
beq printstring1
|
||||||
jsr printsign
|
jsr printsign
|
||||||
lda psa
|
lda psa
|
||||||
clc
|
clc
|
||||||
adc #1
|
adc #1
|
||||||
sta psa
|
sta psa
|
||||||
lda psa+1
|
lda psa+1
|
||||||
adc #0
|
adc #0
|
||||||
sta psa+1
|
sta psa+1
|
||||||
jmp printstring2
|
jmp printstring2
|
||||||
printstring1:
|
printstring1:
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
.proc printhex
|
.proc printhex
|
||||||
pha
|
pha
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
and #$0f
|
and #$0f
|
||||||
stx temp_x
|
stx temp_x
|
||||||
tax
|
tax
|
||||||
lda hex2asc,x
|
lda hex2asc,x
|
||||||
ldx temp_x
|
ldx temp_x
|
||||||
stx lcd_x
|
stx LCD_X
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
jsr printsign
|
jsr printsign
|
||||||
pla
|
pla
|
||||||
and #$0f
|
and #$0f
|
||||||
inx
|
inx
|
||||||
stx temp_x
|
stx temp_x
|
||||||
tax
|
tax
|
||||||
lda hex2asc,x
|
lda hex2asc,x
|
||||||
ldx temp_x
|
ldx temp_x
|
||||||
stx lcd_x
|
stx LCD_X
|
||||||
sty lcd_y
|
sty LCD_Y
|
||||||
jmp printsign
|
jmp printsign
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc printsign
|
.proc printsign
|
||||||
sty temp_y
|
sty temp_y
|
||||||
stx temp_x
|
stx temp_x
|
||||||
sta temp_a
|
sta temp_a
|
||||||
lda temp_a
|
|
||||||
sta addr
|
lda temp_a
|
||||||
lda #0
|
sta addr
|
||||||
sta addr+1
|
|
||||||
asl addr
|
lda #0
|
||||||
rol addr+1
|
sta addr+1
|
||||||
asl addr
|
asl addr
|
||||||
rol addr+1
|
rol addr+1
|
||||||
asl addr
|
asl addr
|
||||||
rol addr+1
|
rol addr+1
|
||||||
lda addr
|
asl addr
|
||||||
clc
|
rol addr+1
|
||||||
adc #<chars
|
|
||||||
sta addr
|
lda addr
|
||||||
lda addr+1
|
clc
|
||||||
adc #>chars
|
adc #<chars
|
||||||
sta addr+1
|
sta addr
|
||||||
ldx #8
|
lda addr+1
|
||||||
ldy #0
|
adc #>chars
|
||||||
|
sta addr+1
|
||||||
|
|
||||||
|
ldx #8
|
||||||
|
ldy #0
|
||||||
printsign1:
|
printsign1:
|
||||||
lda (addr),y
|
lda (addr),y
|
||||||
sta lcd_data
|
sta LCD_DATA
|
||||||
iny
|
iny
|
||||||
dex
|
dex
|
||||||
bne printsign1
|
bne printsign1
|
||||||
ldx temp_x
|
|
||||||
ldy temp_y
|
ldx temp_x
|
||||||
rts
|
ldy temp_y
|
||||||
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
25
util/gamate/gamate-fixcart.c
Normal file
25
util/gamate/gamate-fixcart.c
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
unsigned char buffer[512 * 1024];
|
||||||
|
unsigned len;
|
||||||
|
FILE *in, *out;
|
||||||
|
int n, i;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
if (argc < 3) {
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
in = fopen(argv[1], "rb");
|
||||||
|
out = fopen(argv[2], "wb");
|
||||||
|
len = fread(buffer, 1, 512 * 1024, in);
|
||||||
|
n = 0; for (i = 0x1000; i < 0x2000; i++) {
|
||||||
|
n += buffer[i];
|
||||||
|
}
|
||||||
|
buffer[0] = n & 0xff;
|
||||||
|
buffer[1] = (n >> 8) & 0xff;
|
||||||
|
fwrite(buffer, 1, len, out);
|
||||||
|
fclose(in);
|
||||||
|
fclose(out);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue