]> git.sur5r.net Git - cc65/commitdiff
initial import of the gamate stuff
authormrdudz <mrdudz@users.noreply.github.com>
Sat, 14 Nov 2015 12:15:29 +0000 (13:15 +0100)
committermrdudz <mrdudz@users.noreply.github.com>
Sat, 14 Nov 2015 12:15:29 +0000 (13:15 +0100)
18 files changed:
README.md
asminc/gamate.inc [new file with mode: 0644]
cfg/gamate.cfg [new file with mode: 0644]
doc/gamate.sgml [new file with mode: 0644]
doc/index.sgml
include/conio.h
include/gamate.h [new file with mode: 0644]
include/time.h
libsrc/Makefile
libsrc/gamate/crt0.s [new file with mode: 0644]
src/ca65/main.c
src/cc65/main.c
src/common/target.c
src/common/target.h
testcode/lib/gamate/Makefile [new file with mode: 0644]
testcode/lib/gamate/audiotest.s [new file with mode: 0644]
testcode/lib/gamate/cga2.chr [new file with mode: 0644]
testcode/lib/gamate/lcdtest.s [new file with mode: 0644]

index 688b380294291d74750713425821c9a5fd342fea..49a5d01f3c9b316de3b8c11b6652a6a163298c70 100644 (file)
--- a/README.md
+++ b/README.md
@@ -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.
diff --git a/asminc/gamate.inc b/asminc/gamate.inc
new file mode 100644 (file)
index 0000000..bce86ea
--- /dev/null
@@ -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
+
diff --git a/cfg/gamate.cfg b/cfg/gamate.cfg
new file mode 100644 (file)
index 0000000..5eac46c
--- /dev/null
@@ -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__;
+}
diff --git a/doc/gamate.sgml b/doc/gamate.sgml
new file mode 100644 (file)
index 0000000..227672b
--- /dev/null
@@ -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>
+
+
+
index eb13c9af591b539092384f3a43af373ac3c397ff..01ec6159530d84acde3a0c2292d869c78f3a521f 100644 (file)
   <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.
 
index 8638e94d425b26ceaf4fab599eacc1204ee4e805..9eb68e565b05aa8ea1142175cc55a6cd0dd12119 100644 (file)
@@ -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__)
diff --git a/include/gamate.h b/include/gamate.h
new file mode 100644 (file)
index 0000000..3c141f0
--- /dev/null
@@ -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
+
index 12f130f5235b4add8bc9752676f9811d6216d4cb..33bcbb569bf93cabc25eaf905b80550fdae5fdfd 100644 (file)
@@ -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 */
index d70ad5a3156251e6dfb935a976d7599bae3f8a62..a4101aecd9eb3fba686b4f5078165081d72e25a2 100644 (file)
@@ -22,6 +22,7 @@ TARGETS = apple2    \
           atmos     \
           $(CBMS)   \
           $(GEOS)   \
+          gamate    \
           lynx      \
           nes       \
           osic1p    \
diff --git a/libsrc/gamate/crt0.s b/libsrc/gamate/crt0.s
new file mode 100644 (file)
index 0000000..8d1c8b6
--- /dev/null
@@ -0,0 +1 @@
index d81a875778211560c3960f2179fdd4209197ac17..0016c46f3fe8b3eae76b205e9a9a431bb1189996 100644 (file)
@@ -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);
index 1041b8fa2df57d33019dd5b88ed2e5fb7eb432b5..abe2af56ed8359cfb274bd9ac961afdfc01b6100 100644 (file)
@@ -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);
index 60b9af6603c1f75d4d3751c6d2c6c8e08169f532..e89010123f4cec03203675885b91c032df8e6506 100644 (file)
@@ -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 */
index 3ea562aa6dc9c4d26761ad13533b40c5b22ab31f..6366b725f48bebda5bcf3b7fe8bc9c1ef16c7ce7 100644 (file)
@@ -79,6 +79,7 @@ typedef enum {
     TGT_SIM6502,
     TGT_SIM65C02,
     TGT_PCENGINE,
+    TGT_GAMATE,
     TGT_COUNT                   /* Number of target systems */
 } target_t;
 
diff --git a/testcode/lib/gamate/Makefile b/testcode/lib/gamate/Makefile
new file mode 100644 (file)
index 0000000..8d1c8b6
--- /dev/null
@@ -0,0 +1 @@
diff --git a/testcode/lib/gamate/audiotest.s b/testcode/lib/gamate/audiotest.s
new file mode 100644 (file)
index 0000000..6d9670b
--- /dev/null
@@ -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
+
diff --git a/testcode/lib/gamate/cga2.chr b/testcode/lib/gamate/cga2.chr
new file mode 100644 (file)
index 0000000..769f01f
Binary files /dev/null and b/testcode/lib/gamate/cga2.chr differ
diff --git a/testcode/lib/gamate/lcdtest.s b/testcode/lib/gamate/lcdtest.s
new file mode 100644 (file)
index 0000000..506016a
--- /dev/null
@@ -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
+