initial import of the gamate stuff
This commit is contained in:
parent
b6f429f934
commit
60285097e3
18 changed files with 1112 additions and 0 deletions
|
@ -25,6 +25,7 @@ including
|
|||
- the Atari 8 bit machines.
|
||||
- the Atari 5200 console.
|
||||
- GEOS for the C64, C128 and Apple //e.
|
||||
- the Bit Corporation Gamate console.
|
||||
- the NEC PC-Engine (aka TurboGrafx-16).
|
||||
- the Nintendo Entertainment System (NES) console.
|
||||
- the Supervision console.
|
||||
|
|
43
asminc/gamate.inc
Normal file
43
asminc/gamate.inc
Normal file
|
@ -0,0 +1,43 @@
|
|||
; gamate symbols
|
||||
|
||||
.p02
|
||||
|
||||
LCD_WIDTH = 160
|
||||
LCD_HEIGHT = 152
|
||||
|
||||
lcd_base = $5000
|
||||
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
|
||||
|
||||
controls = $4400
|
||||
; active low
|
||||
up=1
|
||||
down=2
|
||||
left=4
|
||||
right=8
|
||||
button_a=$10
|
||||
button_b=$20
|
||||
start=$40
|
||||
select=$80
|
||||
|
||||
cart_main = $6020
|
||||
;cart_nmi = $6023
|
||||
cart_irq = $6026 ; 135 hz
|
||||
cart_font = $6029
|
||||
|
||||
nmi_enable = $c
|
||||
nmi_4800 = $a
|
||||
|
||||
_f009 = $f009 ; wait 1/60s
|
||||
_f00c = $f00c ; install font
|
||||
_f012 = $f012 ; write screen
|
||||
|
32
cfg/gamate.cfg
Normal file
32
cfg/gamate.cfg
Normal file
|
@ -0,0 +1,32 @@
|
|||
# c version of 32kbyte config file
|
||||
# .data located in rom
|
||||
|
||||
# ld65 config file
|
||||
# ld65 --config gamate.cfg -o <prog>.bin <prog>.o
|
||||
|
||||
MEMORY {
|
||||
ZP: start = $0000, size = $100;
|
||||
CPUSTACK: start = $0100, size =$100;
|
||||
RAM: start = $0200, size = $200, define = yes;
|
||||
# ROM: start = $6000, size = $8000, fill = yes, fillval = $ff, file = %O, define = yes;
|
||||
ROM: start = $6000, size = $8000, fill = yes, fillval = $00, file = %O, define = yes;
|
||||
}
|
||||
|
||||
SEGMENTS {
|
||||
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;
|
||||
ZEROPAGE: load = ZP, type = zp, define = yes;
|
||||
}
|
||||
|
||||
FEATURES {
|
||||
CONDES: segment = RODATA,
|
||||
type = constructor,
|
||||
label = __CONSTRUCTOR_TABLE__,
|
||||
count = __CONSTRUCTOR_COUNT__;
|
||||
CONDES: segment = RODATA,
|
||||
type = destructor,
|
||||
label = __DESTRUCTOR_TABLE__,
|
||||
count = __DESTRUCTOR_COUNT__;
|
||||
}
|
154
doc/gamate.sgml
Normal file
154
doc/gamate.sgml
Normal file
|
@ -0,0 +1,154 @@
|
|||
<!doctype linuxdoc system>
|
||||
|
||||
<article>
|
||||
|
||||
<title>Gamate System specific information for cc65
|
||||
<author>
|
||||
<url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">
|
||||
<date>2015-11-14
|
||||
|
||||
<abstract>
|
||||
An overview over the Gamate runtime system as it is implemented for the
|
||||
cc65 C compiler.
|
||||
</abstract>
|
||||
|
||||
<!-- Table of contents -->
|
||||
<toc>
|
||||
|
||||
<!-- Begin the document -->
|
||||
|
||||
<sect>Overview<p>
|
||||
|
||||
This file contains an overview of the Gamate runtime system as it comes
|
||||
with the cc65 C compiler. It describes the memory layout, Gamate specific header
|
||||
files, available drivers, and any pitfalls specific to that platform.
|
||||
|
||||
Please note that Gamate specific functions are just mentioned here, they are
|
||||
described in detail in the separate <url url="funcref.html" name="function
|
||||
reference">. Even functions marked as "platform dependent" may be available on
|
||||
more than one platform. Please see the function reference for more
|
||||
information.
|
||||
|
||||
|
||||
<sect>Binary format<p>
|
||||
|
||||
The standard binary output format generated by the linker for the Gamate target
|
||||
is a cartridge image with header. It is of course possible to change this
|
||||
behaviour by using a modified startup file and linker config.
|
||||
|
||||
<sect>Platform specific header files<p>
|
||||
|
||||
Programs containing Gamate specific code may use the <tt/gamate.h/ header file.
|
||||
|
||||
|
||||
<sect1>Hardware access<p>
|
||||
|
||||
The following pseudo variables declared in the <tt/gamate.inc/ include file do
|
||||
allow access to hardware located in the address space.
|
||||
|
||||
<descrip>
|
||||
|
||||
</descrip><p>
|
||||
|
||||
|
||||
|
||||
<sect>Loadable drivers<p>
|
||||
|
||||
All drivers must be statically linked because no file I/O is available.
|
||||
The names in the parentheses denote the symbols to be used for static linking of the drivers.
|
||||
|
||||
|
||||
<sect1>Graphics drivers<p>
|
||||
|
||||
No TGI graphics drivers are currently available for the Gamate.
|
||||
|
||||
|
||||
<sect1>Extended memory drivers<p>
|
||||
|
||||
No extended memory drivers are currently available for the Gamate.
|
||||
|
||||
|
||||
<sect1>Joystick drivers<p>
|
||||
|
||||
<descrip>
|
||||
|
||||
<tag><tt/gamate-stdjoy.joy (gamate_stdjoy)/</tag>
|
||||
A joystick driver for the standard two buttons joypad is available.
|
||||
|
||||
</descrip><p>
|
||||
|
||||
|
||||
<sect1>Mouse drivers<p>
|
||||
|
||||
No mouse drivers are currently available for the Gamate.
|
||||
|
||||
|
||||
<sect1>RS232 device drivers<p>
|
||||
|
||||
No serial drivers are currently available for the Gamate.
|
||||
|
||||
|
||||
|
||||
<sect>Limitations<p>
|
||||
|
||||
<itemize>
|
||||
<item>interruptor support in crt0 (and cfg) is missing
|
||||
</itemize>
|
||||
|
||||
<sect1>Disk I/O<p>
|
||||
|
||||
The existing library for the Gamate doesn't implement C file
|
||||
I/O. There are no hacks for the <tt/read()/ and <tt/write()/ routines.
|
||||
|
||||
To be more concrete, this limitation means that you cannot use any of the
|
||||
following functions (and a few others):
|
||||
|
||||
<itemize>
|
||||
<item>printf
|
||||
<item>fclose
|
||||
<item>fopen
|
||||
<item>fread
|
||||
<item>fprintf
|
||||
<item>fputc
|
||||
<item>fscanf
|
||||
<item>fwrite
|
||||
<item>...
|
||||
</itemize>
|
||||
|
||||
<sect>Other hints<p>
|
||||
|
||||
<itemize>
|
||||
<item>a good emulator to use for Gamate is "MESS/MAME" (<url url="http://www.mess.org/">)
|
||||
</itemize>
|
||||
|
||||
some resources on the Gamate:
|
||||
|
||||
<itemize>
|
||||
<item><url url="http://en.wikipedia.org/wiki/Gamate">
|
||||
</itemize>
|
||||
|
||||
<sect>License<p>
|
||||
|
||||
This software is provided 'as-is', without any expressed or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
<enum>
|
||||
<item> The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
<item> Altered source versions must be plainly marked as such, and must not
|
||||
be misrepresented as being the original software.
|
||||
<item> This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
</enum>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
|
@ -140,6 +140,9 @@
|
|||
<tag><htmlurl url="pce.html" name="pce.html"></tag>
|
||||
Topics specific to NEC PC-Engine (TurboGrafx) Console.
|
||||
|
||||
<tag><htmlurl url="gamate.html" name="gamate.html"></tag>
|
||||
Topics specific to Bit Corporation Gamate Console.
|
||||
|
||||
<tag><htmlurl url="pet.html" name="pet.html"></tag>
|
||||
Topics specific to the Commodore PET machines.
|
||||
|
||||
|
|
|
@ -69,6 +69,8 @@
|
|||
# include <atmos.h>
|
||||
#elif defined(__CBM__)
|
||||
# include <cbm.h>
|
||||
#elif defined(__GAMATE__)
|
||||
# include <gamate.h>
|
||||
#elif defined(__GEOS__)
|
||||
# include <geos.h>
|
||||
#elif defined(__LUNIX__)
|
||||
|
|
43
include/gamate.h
Normal file
43
include/gamate.h
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*****************************************************************************/
|
||||
/* */
|
||||
/* gamate.h */
|
||||
/* */
|
||||
/* Gamate system specific definitions */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 2015 Groepaz/Hitmen */
|
||||
/* */
|
||||
/* */
|
||||
/* This software is provided 'as-is', without any expressed or implied */
|
||||
/* warranty. In no event will the authors be held liable for any damages */
|
||||
/* arising from the use of this software. */
|
||||
/* */
|
||||
/* Permission is granted to anyone to use this software for any purpose, */
|
||||
/* including commercial applications, and to alter it and redistribute it */
|
||||
/* freely, subject to the following restrictions: */
|
||||
/* */
|
||||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||
/* claim that you wrote the original software. If you use this software */
|
||||
/* in a product, an acknowledgment in the product documentation would be */
|
||||
/* appreciated but is not required. */
|
||||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||
/* be misrepresented as being the original software. */
|
||||
/* 3. This notice may not be removed or altered from any source */
|
||||
/* distribution. */
|
||||
/* */
|
||||
/*****************************************************************************/
|
||||
|
||||
#ifndef _GAMATE_H
|
||||
#define _GAMATE_H
|
||||
|
||||
/* Check for errors */
|
||||
#if !defined(__GAMATE__)
|
||||
# error This module may only be used when compiling for the Gamate!
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* End of gamate.h */
|
||||
#endif
|
||||
|
|
@ -102,6 +102,9 @@ unsigned _clocks_per_sec (void);
|
|||
#elif defined(__PCE__)
|
||||
# define CLK_TCK 60 /* POSIX */
|
||||
# define CLOCKS_PER_SEC 60 /* ANSI */
|
||||
#elif defined(__GAMATE__)
|
||||
# define CLK_TCK 60 /* POSIX */ /* FIXME */
|
||||
# define CLOCKS_PER_SEC 60 /* ANSI */ /* FIXME */
|
||||
#elif defined(__GEOS__)
|
||||
# define CLK_TCK 1 /* POSIX */
|
||||
# define CLOCKS_PER_SEC 1 /* ANSI */
|
||||
|
|
|
@ -22,6 +22,7 @@ TARGETS = apple2 \
|
|||
atmos \
|
||||
$(CBMS) \
|
||||
$(GEOS) \
|
||||
gamate \
|
||||
lynx \
|
||||
nes \
|
||||
osic1p \
|
||||
|
|
1
libsrc/gamate/crt0.s
Normal file
1
libsrc/gamate/crt0.s
Normal file
|
@ -0,0 +1 @@
|
|||
|
|
@ -264,6 +264,10 @@ static void SetSys (const char* Sys)
|
|||
NewSymbol ("__APPLE2ENH__", 1);
|
||||
break;
|
||||
|
||||
case TGT_GAMATE:
|
||||
NewSymbol ("__GAMATE__", 1);
|
||||
break;
|
||||
|
||||
case TGT_GEOS_CBM:
|
||||
/* Do not handle as a CBM system */
|
||||
NewSymbol ("__GEOS__", 1);
|
||||
|
|
|
@ -220,6 +220,10 @@ static void SetSys (const char* Sys)
|
|||
DefineNumericMacro ("__APPLE2ENH__", 1);
|
||||
break;
|
||||
|
||||
case TGT_GAMATE:
|
||||
DefineNumericMacro ("__GAMATE__", 1);
|
||||
break;
|
||||
|
||||
case TGT_GEOS_CBM:
|
||||
/* Do not handle as a CBM system */
|
||||
DefineNumericMacro ("__GEOS__", 1);
|
||||
|
|
|
@ -154,6 +154,7 @@ static const TargetEntry TargetMap[] = {
|
|||
{ "c64", TGT_C64 },
|
||||
{ "cbm510", TGT_CBM510 },
|
||||
{ "cbm610", TGT_CBM610 },
|
||||
{ "gamate", TGT_GAMATE },
|
||||
{ "geos", TGT_GEOS_CBM },
|
||||
{ "geos-apple", TGT_GEOS_APPLE },
|
||||
{ "geos-cbm", TGT_GEOS_CBM },
|
||||
|
@ -204,6 +205,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = {
|
|||
{ "sim6502", CPU_6502, BINFMT_BINARY, CTNone },
|
||||
{ "sim65c02", CPU_65C02, BINFMT_BINARY, CTNone },
|
||||
{ "pce", CPU_HUC6280, BINFMT_BINARY, CTNone },
|
||||
{ "gamate", CPU_6502, BINFMT_BINARY, CTNone },
|
||||
};
|
||||
|
||||
/* Target system */
|
||||
|
|
|
@ -79,6 +79,7 @@ typedef enum {
|
|||
TGT_SIM6502,
|
||||
TGT_SIM65C02,
|
||||
TGT_PCENGINE,
|
||||
TGT_GAMATE,
|
||||
TGT_COUNT /* Number of target systems */
|
||||
} target_t;
|
||||
|
||||
|
|
1
testcode/lib/gamate/Makefile
Normal file
1
testcode/lib/gamate/Makefile
Normal file
|
@ -0,0 +1 @@
|
|||
|
434
testcode/lib/gamate/audiotest.s
Normal file
434
testcode/lib/gamate/audiotest.s
Normal file
|
@ -0,0 +1,434 @@
|
|||
.include "gamate.inc"
|
||||
.zeropage
|
||||
addr: .word 0
|
||||
psa: .word 0
|
||||
|
||||
.word 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0 ; get out of sensitiv area
|
||||
|
||||
readaddr: .word 0
|
||||
editbuffer1: .byte 0,0,0,0, 0,0,0,0 ;0,1,2,3,4,5,6,7
|
||||
writeaddr: .word 0
|
||||
editbuffer2: .byte 0,0,0,0, 0,0,0,0 ;8,9,$a,$b,$c,$d,$e,$f
|
||||
cursor: .byte 0
|
||||
controlslast: .byte 0
|
||||
controlsedge: .byte 0
|
||||
|
||||
.data
|
||||
temp_x: .byte 0
|
||||
temp_y: .byte 0
|
||||
temp_a: .byte 0
|
||||
irq_count: .byte 0
|
||||
nmi_count: .byte 0
|
||||
psx: .byte 0
|
||||
psy: .byte 0
|
||||
xpos: .byte 0
|
||||
ypos: .byte 0
|
||||
|
||||
.code
|
||||
checksum: .word 0
|
||||
.byte 1,0,1
|
||||
.byte "COPYRIGHT BIT CORPORATION", 0, $ff
|
||||
jmp reset
|
||||
jmp nmi
|
||||
jmp irq
|
||||
|
||||
chars:
|
||||
.incbin "cga2.chr"
|
||||
|
||||
hex2asc: .byte "0123456789abcdef"
|
||||
|
||||
.proc nmi
|
||||
inc nmi_count
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc irq
|
||||
inc irq_count
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc reset
|
||||
lda #>audio_base
|
||||
sta writeaddr+1
|
||||
sta readaddr+1
|
||||
lda #<audio_base
|
||||
sta writeaddr
|
||||
sta readaddr
|
||||
|
||||
lda #$10
|
||||
sta editbuffer1+6
|
||||
lda #$e
|
||||
sta editbuffer2+5
|
||||
lda #$ff
|
||||
sta editbuffer2+3
|
||||
lda #$ff
|
||||
sta editbuffer2+4
|
||||
lda #$0f
|
||||
sta editbuffer2
|
||||
lda #$0f
|
||||
sta editbuffer2+1
|
||||
lda #$0e
|
||||
sta editbuffer2+2
|
||||
lda #$38
|
||||
sta editbuffer1+7
|
||||
|
||||
lda #0
|
||||
sta lcd_x_pos
|
||||
sta lcd_y_pos
|
||||
sta irq_count
|
||||
sta cursor
|
||||
lda #1
|
||||
sta nmi_count
|
||||
cli
|
||||
lda #lcd_mode_y_increment
|
||||
sta lcd_mode
|
||||
|
||||
jsr printy
|
||||
|
||||
lda #1
|
||||
sta nmi_enable
|
||||
|
||||
loop:
|
||||
lda irq_count
|
||||
loop1:
|
||||
cmp irq_count
|
||||
beq loop1
|
||||
lda irq_count
|
||||
and #7
|
||||
bne loop1
|
||||
|
||||
lda #lcd_mode_y_increment
|
||||
sta lcd_mode
|
||||
|
||||
ldx #3
|
||||
ldy #32
|
||||
lda irq_count
|
||||
jsr printhex
|
||||
|
||||
|
||||
lda cursor
|
||||
ldy #0
|
||||
cmp #20
|
||||
bcc firstline
|
||||
sec
|
||||
sbc #20
|
||||
ldy #24
|
||||
firstline:
|
||||
sta lcd_x
|
||||
sty lcd_y
|
||||
lda #' '
|
||||
jsr printsign
|
||||
norclearcursor:
|
||||
|
||||
jsr inputs
|
||||
|
||||
lda irq_count
|
||||
and #8
|
||||
bne nocursor
|
||||
lda cursor
|
||||
ldy #0
|
||||
cmp #20
|
||||
bcc firstline2
|
||||
sec
|
||||
sbc #20
|
||||
ldy #24
|
||||
firstline2:
|
||||
sta lcd_x
|
||||
sty lcd_y
|
||||
lda #'x'
|
||||
jsr printsign
|
||||
nocursor:
|
||||
|
||||
lda #lcd_mode_y_increment
|
||||
sta lcd_mode
|
||||
jsr printy
|
||||
jmp loop
|
||||
.endproc
|
||||
|
||||
.proc printy
|
||||
|
||||
ldy #0
|
||||
loop1:
|
||||
tya
|
||||
pha
|
||||
asl
|
||||
tax
|
||||
lda readaddr,y
|
||||
ldy #8
|
||||
jsr printhex
|
||||
pla
|
||||
tay
|
||||
iny
|
||||
cpy #10
|
||||
bne loop1
|
||||
|
||||
loop2:
|
||||
tya
|
||||
pha
|
||||
tya
|
||||
sec
|
||||
sbc #10
|
||||
asl
|
||||
tax
|
||||
lda readaddr,y
|
||||
ldy #16
|
||||
jsr printhex
|
||||
pla
|
||||
tay
|
||||
iny
|
||||
cpy #20
|
||||
bne loop2
|
||||
|
||||
ldx #0
|
||||
ldy #32
|
||||
lda nmi_count
|
||||
jsr printhex
|
||||
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc inputs
|
||||
lda controlslast
|
||||
eor controls
|
||||
and controlslast
|
||||
eor #$ff
|
||||
sta controlsedge
|
||||
and #up
|
||||
bne notup
|
||||
|
||||
lda cursor
|
||||
lsr
|
||||
tay
|
||||
bcs uplow
|
||||
lda readaddr,y
|
||||
clc
|
||||
adc #$10
|
||||
sta readaddr,y
|
||||
jmp notup
|
||||
uplow:lda readaddr,y
|
||||
clc
|
||||
adc #1
|
||||
sta readaddr,y
|
||||
notup:lda controlsedge
|
||||
and #down
|
||||
bne notdown
|
||||
lda cursor
|
||||
lsr
|
||||
tay
|
||||
bcs downlow
|
||||
lda readaddr,y
|
||||
sec
|
||||
sbc #$10
|
||||
sta readaddr,y
|
||||
jmp notdown
|
||||
downlow:
|
||||
lda readaddr,y
|
||||
sec
|
||||
sbc #1
|
||||
sta readaddr,y
|
||||
notdown:lda controlsedge
|
||||
and #left
|
||||
bne notleft
|
||||
lda cursor
|
||||
beq notleft
|
||||
dec cursor
|
||||
notleft:lda controlsedge
|
||||
and #right
|
||||
bne notright
|
||||
lda cursor
|
||||
cmp #40
|
||||
beq notright
|
||||
inc cursor
|
||||
notright:lda controlsedge
|
||||
and #start
|
||||
bne notstart
|
||||
lda #0
|
||||
sta audio_base
|
||||
sta audio_base+1
|
||||
sta audio_base+2
|
||||
sta audio_base+3
|
||||
sta audio_base+4
|
||||
sta audio_base+5
|
||||
sta audio_base+6
|
||||
sta audio_base+8
|
||||
sta audio_base+9
|
||||
sta audio_base+10
|
||||
sta audio_base+11
|
||||
sta audio_base+12
|
||||
sta audio_base+13
|
||||
sta audio_base+7
|
||||
notstart:lda controlsedge
|
||||
and #select
|
||||
bne notselect
|
||||
lda editbuffer1
|
||||
sta audio_base
|
||||
lda editbuffer1+1
|
||||
sta audio_base+1
|
||||
lda editbuffer1+2
|
||||
sta audio_base+2
|
||||
lda editbuffer1+3
|
||||
sta audio_base+3
|
||||
lda editbuffer1+4
|
||||
sta audio_base+4
|
||||
lda editbuffer1+5
|
||||
sta audio_base+5
|
||||
lda editbuffer1+6
|
||||
sta audio_base+6
|
||||
lda editbuffer2
|
||||
sta audio_base+8
|
||||
lda editbuffer2+1
|
||||
sta audio_base+9
|
||||
lda editbuffer2+2
|
||||
sta audio_base+10
|
||||
lda editbuffer2+3
|
||||
sta audio_base+11
|
||||
lda editbuffer2+4
|
||||
sta audio_base+12
|
||||
lda editbuffer2+5
|
||||
sta audio_base+13
|
||||
lda editbuffer1+7
|
||||
sta audio_base+7
|
||||
notselect:lda controlsedge
|
||||
and #button_a
|
||||
bne notbuttona
|
||||
ldy #0
|
||||
ldy #0
|
||||
writea:lda editbuffer1,y
|
||||
sta (writeaddr),y
|
||||
iny
|
||||
cpy #8
|
||||
bne writea
|
||||
writeb:lda editbuffer2-8,y
|
||||
sta (writeaddr),y
|
||||
iny
|
||||
cpy #16
|
||||
bne writeb
|
||||
notbuttona:lda controlsedge
|
||||
and #button_b
|
||||
bne notbuttonb
|
||||
ldy #0
|
||||
reada:lda (readaddr),y
|
||||
sta editbuffer1,y
|
||||
iny
|
||||
cpy #8
|
||||
bne reada
|
||||
readb:lda (readaddr),y
|
||||
sta editbuffer2-8,y
|
||||
iny
|
||||
cpy #16
|
||||
bne readb
|
||||
notbuttonb:
|
||||
lda controls
|
||||
sta controlslast
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc printstring
|
||||
sta psa
|
||||
stx psa+1
|
||||
ldx #0
|
||||
stx psx
|
||||
sty psy
|
||||
printstring2:
|
||||
ldy #0
|
||||
lda (psa),y
|
||||
beq printstring1
|
||||
ldx psx
|
||||
stx lcd_x
|
||||
ldy psy
|
||||
sty lcd_y
|
||||
jsr printsign
|
||||
inc psx
|
||||
lda psa
|
||||
clc
|
||||
adc #1
|
||||
sta psa
|
||||
lda psa+1
|
||||
adc #0
|
||||
sta psa+1
|
||||
jmp printstring2
|
||||
printstring1:
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc printstringy
|
||||
sta psa
|
||||
stx psa+1
|
||||
printstring2:
|
||||
ldy #0
|
||||
lda (psa),y
|
||||
beq printstring1
|
||||
jsr printsign
|
||||
lda psa
|
||||
clc
|
||||
adc #1
|
||||
sta psa
|
||||
lda psa+1
|
||||
adc #0
|
||||
sta psa+1
|
||||
jmp printstring2
|
||||
printstring1:
|
||||
rts
|
||||
.endproc
|
||||
|
||||
|
||||
.proc printhex
|
||||
pha
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
and #$0f
|
||||
stx temp_x
|
||||
tax
|
||||
lda hex2asc,x
|
||||
ldx temp_x
|
||||
stx lcd_x
|
||||
sty lcd_y
|
||||
jsr printsign
|
||||
pla
|
||||
and #$0f
|
||||
inx
|
||||
stx temp_x
|
||||
tax
|
||||
lda hex2asc,x
|
||||
ldx temp_x
|
||||
stx lcd_x
|
||||
sty lcd_y
|
||||
jmp printsign
|
||||
.endproc
|
||||
|
||||
.proc printsign
|
||||
sty temp_y
|
||||
stx temp_x
|
||||
sta temp_a
|
||||
lda temp_a
|
||||
sta addr
|
||||
lda #0
|
||||
sta addr+1
|
||||
asl addr
|
||||
rol addr+1
|
||||
asl addr
|
||||
rol addr+1
|
||||
asl addr
|
||||
rol addr+1
|
||||
lda addr
|
||||
clc
|
||||
adc #<chars
|
||||
sta addr
|
||||
lda addr+1
|
||||
adc #>chars
|
||||
sta addr+1
|
||||
ldx #8
|
||||
ldy #0
|
||||
printsign1:
|
||||
lda (addr),y
|
||||
sta lcd_data
|
||||
iny
|
||||
dex
|
||||
bne printsign1
|
||||
ldx temp_x
|
||||
ldy temp_y
|
||||
rts
|
||||
.endproc
|
||||
|
BIN
testcode/lib/gamate/cga2.chr
Normal file
BIN
testcode/lib/gamate/cga2.chr
Normal file
Binary file not shown.
383
testcode/lib/gamate/lcdtest.s
Normal file
383
testcode/lib/gamate/lcdtest.s
Normal file
|
@ -0,0 +1,383 @@
|
|||
.include "gamate.inc"
|
||||
.zeropage
|
||||
addr: .word 0
|
||||
psa: .word 0
|
||||
|
||||
.data
|
||||
temp_x: .byte 0
|
||||
temp_y: .byte 0
|
||||
temp_a: .byte 0
|
||||
irq_count: .byte 0
|
||||
nmi_count: .byte 0
|
||||
psx: .byte 0
|
||||
psy: .byte 0
|
||||
count: .word 0
|
||||
counted: .word 0
|
||||
xpos: .byte 0
|
||||
ypos: .byte 0
|
||||
|
||||
.code
|
||||
checksum: .word 0
|
||||
.byte 1,0,1
|
||||
.byte "COPYRIGHT BIT CORPORATION", 0, $ff
|
||||
jmp reset
|
||||
jmp nmi
|
||||
jmp irq
|
||||
|
||||
chars:
|
||||
.incbin "cga2.chr"
|
||||
|
||||
hex2asc: .byte "0123456789abcdef"
|
||||
format: .byte "IrqNmiCountXposYpos", 0
|
||||
xdesc: .byte "0123456789abcdefghijklmnopqrstuv", 0
|
||||
ydesc: .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
|
||||
|
||||
.proc nmi
|
||||
inc nmi_count
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc irq
|
||||
inc irq_count
|
||||
lda count
|
||||
sta counted
|
||||
lda count+1
|
||||
sta counted+1
|
||||
lda #0
|
||||
sta count
|
||||
sta count+1
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc reset
|
||||
lda #0
|
||||
sta lcd_x_pos
|
||||
sta lcd_y_pos
|
||||
cli
|
||||
lda #lcd_mode_y_increment
|
||||
sta lcd_mode
|
||||
|
||||
lda #0
|
||||
sta lcd_x
|
||||
lda #<xdesc
|
||||
ldx #>xdesc
|
||||
ldy #0
|
||||
jsr printstring
|
||||
|
||||
lda #lcd_x_pos_plane2_flag
|
||||
sta lcd_x
|
||||
lda #<xdesc
|
||||
ldx #>xdesc
|
||||
ldy #128
|
||||
jsr printstring
|
||||
|
||||
lda #0
|
||||
sta lcd_x
|
||||
lda #<ydesc
|
||||
ldx #>ydesc
|
||||
ldy #0
|
||||
sty lcd_y
|
||||
jsr printstringy
|
||||
|
||||
; lda #$90;(lcd_x_pos_plane2_flag|(128/8))
|
||||
lda #(lcd_x_pos_plane2_flag|(128/8))
|
||||
sta lcd_x
|
||||
lda #<ydesc
|
||||
ldx #>ydesc
|
||||
ldy #0
|
||||
sty lcd_y
|
||||
jsr printstringy
|
||||
|
||||
|
||||
lda #<format
|
||||
ldx #>format
|
||||
ldy #8
|
||||
jsr printstring
|
||||
|
||||
lda #0
|
||||
sta lcd_mode
|
||||
lda #24/8
|
||||
sta lcd_x
|
||||
lda #24
|
||||
sta lcd_y
|
||||
lda #'X'
|
||||
jsr printsign
|
||||
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
|
||||
sta lcd_mode
|
||||
lda #lcd_x_pos_plane2_flag|(48/8)
|
||||
sta lcd_x
|
||||
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
|
||||
sta lcd_mode
|
||||
lda #16/8
|
||||
sta lcd_x
|
||||
lda #72
|
||||
sta lcd_y
|
||||
lda #'V'
|
||||
jsr printsign
|
||||
lda #lcd_mode_y_increment|2
|
||||
sta lcd_mode
|
||||
lda #24/8
|
||||
sta lcd_x
|
||||
lda #72
|
||||
sta lcd_y
|
||||
lda #'V'
|
||||
jsr printsign
|
||||
lda #lcd_mode_y_increment|4
|
||||
sta lcd_mode
|
||||
lda #32/8
|
||||
sta lcd_x
|
||||
lda #72
|
||||
sta lcd_y
|
||||
lda #'V'
|
||||
jsr printsign
|
||||
lda #lcd_mode_y_increment|8
|
||||
sta lcd_mode
|
||||
lda #40/8
|
||||
sta lcd_x
|
||||
lda #72
|
||||
sta lcd_y
|
||||
lda #'V'
|
||||
jsr printsign
|
||||
|
||||
lda #1
|
||||
sta nmi_enable
|
||||
|
||||
loop: lda count
|
||||
clc
|
||||
adc #1
|
||||
sta count
|
||||
lda count+1
|
||||
adc #1
|
||||
sta count+1
|
||||
lda irq_count
|
||||
cmp irq_count
|
||||
beq loop
|
||||
|
||||
jsr inputs
|
||||
lda #lcd_mode_y_increment
|
||||
sta lcd_mode
|
||||
jsr printy
|
||||
|
||||
|
||||
|
||||
jmp loop
|
||||
.endproc
|
||||
|
||||
.proc printy
|
||||
ldx #0
|
||||
ldy #16
|
||||
lda irq_count
|
||||
jsr printhex
|
||||
|
||||
ldx #3
|
||||
ldy #16
|
||||
lda nmi_count
|
||||
jsr printhex
|
||||
|
||||
ldx #6
|
||||
ldy #16
|
||||
lda counted+1
|
||||
jsr printhex
|
||||
ldx #8
|
||||
ldy #16
|
||||
lda counted
|
||||
jsr printhex
|
||||
|
||||
ldx #11
|
||||
ldy #16
|
||||
lda xpos
|
||||
jsr printhex
|
||||
ldx #14
|
||||
ldy #16
|
||||
lda ypos
|
||||
jsr printhex
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc inputs
|
||||
lda controls
|
||||
and #up
|
||||
bne notup
|
||||
dec ypos
|
||||
lda ypos
|
||||
sta lcd_y_pos
|
||||
notup:lda controls
|
||||
and #down
|
||||
bne notdown
|
||||
inc ypos
|
||||
lda ypos
|
||||
sta lcd_y_pos
|
||||
notdown:lda controls
|
||||
and #left
|
||||
bne notleft
|
||||
dec xpos
|
||||
lda xpos
|
||||
sta lcd_x_pos
|
||||
notleft:lda controls
|
||||
and #right
|
||||
bne notright
|
||||
inc xpos
|
||||
lda xpos
|
||||
sta lcd_x_pos
|
||||
notright:lda controls
|
||||
and #start
|
||||
bne notstart
|
||||
notstart:lda controls
|
||||
and #select
|
||||
bne notselect
|
||||
notselect:lda controls
|
||||
and #button_a
|
||||
bne notbuttona
|
||||
notbuttona:lda controls
|
||||
and #button_b
|
||||
bne notbuttonb
|
||||
notbuttonb:rts
|
||||
.endproc
|
||||
|
||||
.proc printstring
|
||||
sta psa
|
||||
stx psa+1
|
||||
ldx #0
|
||||
stx psx
|
||||
sty psy
|
||||
printstring2:
|
||||
ldy #0
|
||||
lda (psa),y
|
||||
beq printstring1
|
||||
ldx psx
|
||||
stx lcd_x
|
||||
ldy psy
|
||||
sty lcd_y
|
||||
jsr printsign
|
||||
inc psx
|
||||
lda psa
|
||||
clc
|
||||
adc #1
|
||||
sta psa
|
||||
lda psa+1
|
||||
adc #0
|
||||
sta psa+1
|
||||
jmp printstring2
|
||||
printstring1:
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc printstringy
|
||||
sta psa
|
||||
stx psa+1
|
||||
printstring2:
|
||||
ldy #0
|
||||
lda (psa),y
|
||||
beq printstring1
|
||||
jsr printsign
|
||||
lda psa
|
||||
clc
|
||||
adc #1
|
||||
sta psa
|
||||
lda psa+1
|
||||
adc #0
|
||||
sta psa+1
|
||||
jmp printstring2
|
||||
printstring1:
|
||||
rts
|
||||
.endproc
|
||||
|
||||
|
||||
.proc printhex
|
||||
pha
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
and #$0f
|
||||
stx temp_x
|
||||
tax
|
||||
lda hex2asc,x
|
||||
ldx temp_x
|
||||
stx lcd_x
|
||||
sty lcd_y
|
||||
jsr printsign
|
||||
pla
|
||||
and #$0f
|
||||
inx
|
||||
stx temp_x
|
||||
tax
|
||||
lda hex2asc,x
|
||||
ldx temp_x
|
||||
stx lcd_x
|
||||
sty lcd_y
|
||||
jmp printsign
|
||||
.endproc
|
||||
|
||||
.proc printsign
|
||||
sty temp_y
|
||||
stx temp_x
|
||||
sta temp_a
|
||||
lda temp_a
|
||||
sta addr
|
||||
lda #0
|
||||
sta addr+1
|
||||
asl addr
|
||||
rol addr+1
|
||||
asl addr
|
||||
rol addr+1
|
||||
asl addr
|
||||
rol addr+1
|
||||
lda addr
|
||||
clc
|
||||
adc #<chars
|
||||
sta addr
|
||||
lda addr+1
|
||||
adc #>chars
|
||||
sta addr+1
|
||||
ldx #8
|
||||
ldy #0
|
||||
printsign1:
|
||||
lda (addr),y
|
||||
sta lcd_data
|
||||
iny
|
||||
dex
|
||||
bne printsign1
|
||||
ldx temp_x
|
||||
ldy temp_y
|
||||
rts
|
||||
.endproc
|
||||
|
Loading…
Add table
Reference in a new issue