conio and most other stuff working now

This commit is contained in:
mrdudz
2015-11-29 01:14:59 +01:00
parent 88e7b5776a
commit 9fbf8a4299
35 changed files with 2205 additions and 737 deletions

View File

@@ -14,6 +14,14 @@
#include <string.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] = {
{ CH_ULCORNER, CH_HLINE, CH_TTEE, CH_HLINE, CH_URCORNER },
{ CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE },
@@ -29,8 +37,10 @@ void main(void)
clrscr();
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:" );
tcol = textcolor(0); /* remember original textcolor */
bgcol = bgcolor(0); /* remember original background color */
@@ -38,14 +48,14 @@ void main(void)
bgcolor(bgcol);bordercolor(bcol);
for (i = 0; i < 3; ++i) {
gotoxy(i,3 + i);
for (j = 0; j < 16; ++j) {
for (j = 0; j < NUMCOLS; ++j) {
textcolor(j);
cputc('X');
}
}
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);
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);
for (i = 0; i < xsize; ++i) {
cputc('0' + i % 10);
}
revers(0);
for (i = 0; i < 256; ++i) {
for (i = 0; i < NUMCHARS; ++i) {
if ((i != '\n') && (i != '\r')) {
cputc(i);
} else {
@@ -89,13 +99,14 @@ void main(void)
for(;;) {
gotoxy(8, 2);
j = n & 1;
j = n >> 4 & 1;
revers(j);
cputc(j ? 'R' : ' ');
revers(j ^ 1);
cputs(" revers");
cputs(" rvs");
revers(0);
#if !defined(__NES__) && !defined(__PCE__) && !defined(__GAMATE__)
gotoxy(8 + inpos,1);
i = cgetc();
if ((i >= '0') && (i<='9')) {
@@ -120,6 +131,10 @@ void main(void)
cputc(i);
inpos = (inpos + 1) & 7;
}
#endif
#if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__)
waitvblank();
#endif
++n;
}

View File

@@ -1,21 +1,20 @@
all: audiotest.bin lcdtest.bin
all: audiotest.bin lcdtest.bin ctest.bin
audiotest.bin: audiotest.s
# ../../../bin/ca65 -t gamate -o audiotest.o audiotest.s
# ../../../bin/ld65 -t gamate -o audiotest.bin audiotest.o
../../../bin/cl65 -t gamate -o audiotest.bin audiotest.s
../../../bin/cl65 -l audiotest.lst -t gamate -o audiotest.bin audiotest.s
lcdtest.bin: lcdtest.s
# ../../../bin/ca65 -t gamate -o lcdtest.o lcdtest.s
# ../../../bin/ld65 -t gamate -o lcdtest.bin lcdtest.o
../../../bin/cl65 -l bla.lst -t gamate -o lcdtest.bin lcdtest.s
../../../bin/cl65 -l lcdtest.lst -t gamate -o lcdtest.bin lcdtest.s
ctest.bin: ctest.c
../../../bin/cl65 -l ctest.lst -t gamate -o ctest.bin ctest.c
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
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:
rm -f lcdtest.o audiotest.o
rm -f lcdtest.bin audiotest.bin
rm -f lcdtest.o audiotest.o ctest.o
rm -f lcdtest.bin audiotest.bin ctest.bin

View File

@@ -1,8 +1,10 @@
.export reset, irq, nmi ; FIXME
; .export reset, irq, nmi ; FIXME
.export _main
.include "gamate.inc"
.zeropage
.include "gamate.inc"
.zeropage
addr: .word 0
psa: .word 0
@@ -16,7 +18,7 @@ cursor: .byte 0
controlslast: .byte 0
controlsedge: .byte 0
.data
.data
temp_x: .byte 0
temp_y: .byte 0
temp_a: .byte 0
@@ -27,405 +29,414 @@ psy: .byte 0
xpos: .byte 0
ypos: .byte 0
.code
.code
chars:
.incbin "cga2.chr"
hex2asc: .byte "0123456789abcdef"
;-------------------------------------------------------------------------------
.export IRQStub
.proc nmi
inc nmi_count
rts
inc nmi_count
rts
.endproc
.proc irq
inc irq_count
rts
.proc IRQStub
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
.proc _main
lda #>AUDIO_BASE
sta writeaddr+1
sta readaddr+1
lda #<AUDIO_BASE
sta writeaddr
sta readaddr
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
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
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
sta nmi_enable
jsr printy
lda #1
sta ZP_NMI_ENABLE
loop:
lda irq_count
lda irq_count
loop1:
cmp irq_count
beq loop1
lda irq_count
and #7
bne loop1
cmp irq_count
beq loop1
lda irq_count
and #7
bne loop1
lda #lcd_mode_y_increment
sta lcd_mode
lda #LCD_MODE_INC_Y
sta LCD_MODE
ldx #3
ldy #32
lda irq_count
jsr printhex
ldx #3
ldy #32
lda irq_count
jsr printhex
lda cursor
ldy #0
cmp #20
bcc firstline
sec
sbc #20
ldy #24
lda cursor
ldy #0
cmp #20
bcc firstline
sec
sbc #20
ldy #24
firstline:
sta lcd_x
sty lcd_y
lda #' '
jsr printsign
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
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
sta LCD_X
sty LCD_Y
lda #'x'
jsr printsign
nocursor:
lda #lcd_mode_y_increment
sta lcd_mode
jsr printy
jmp loop
lda #LCD_MODE_INC_Y
sta LCD_MODE
jsr printy
jmp loop
.endproc
.proc printy
ldy #0
ldy #0
loop1:
tya
pha
asl
tax
lda readaddr,y
ldy #8
jsr printhex
pla
tay
iny
cpy #10
bne 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
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
ldx #0
ldy #32
lda nmi_count
jsr printhex
rts
rts
.endproc
;-------------------------------------------------------------------------------
.proc inputs
lda controlslast
eor controls
and controlslast
eor #$ff
sta controlsedge
and #up
bne notup
lda controlslast
eor JOY_DATA
and controlslast
eor #$ff
sta controlsedge
and #JOY_DATA_UP
bne notup
lda cursor
lsr
tay
bcs uplow
lda readaddr,y
clc
adc #$10
sta readaddr,y
jmp 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
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
and #JOY_DATA_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
lda readaddr,y
sec
sbc #1
sta readaddr,y
notdown:lda controlsedge
and #left
bne notleft
lda cursor
beq notleft
dec cursor
and #JOY_DATA_LEFT
bne notleft
lda cursor
beq notleft
dec cursor
notleft:lda controlsedge
and #right
bne notright
lda cursor
cmp #40
beq notright
inc cursor
and #JOY_DATA_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
and #JOY_DATA_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
and #JOY_DATA_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
and #JOY_DATA_FIRE_A
bne notbuttona
ldy #0
ldy #0
writea:lda editbuffer1,y
sta (writeaddr),y
iny
cpy #8
bne writea
sta (writeaddr),y
iny
cpy #8
bne writea
writeb:lda editbuffer2-8,y
sta (writeaddr),y
iny
cpy #16
bne writeb
sta (writeaddr),y
iny
cpy #16
bne writeb
notbuttona:lda controlsedge
and #button_b
bne notbuttonb
ldy #0
and #JOY_DATA_FIRE_B
bne notbuttonb
ldy #0
reada:lda (readaddr),y
sta editbuffer1,y
iny
cpy #8
bne reada
sta editbuffer1,y
iny
cpy #8
bne reada
readb:lda (readaddr),y
sta editbuffer2-8,y
iny
cpy #16
bne readb
sta editbuffer2-8,y
iny
cpy #16
bne readb
notbuttonb:
lda controls
sta controlslast
rts
lda JOY_DATA
sta controlslast
rts
.endproc
;-------------------------------------------------------------------------------
.proc printstring
sta psa
stx psa+1
ldx #0
stx psx
sty psy
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
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
rts
.endproc
.proc printstringy
sta psa
stx psa+1
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
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
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
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
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
lda (addr),y
sta LCD_DATA
iny
dex
bne printsign1
ldx temp_x
ldy temp_y
rts
.endproc

View 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;
}

View File

@@ -1,14 +1,12 @@
.export reset, irq, nmi ; FIXME
.export _main
.include "gamate.inc"
.zeropage
.zeropage
addr: .word 0
psa: .word 0
.data
.data
temp_x: .byte 0
temp_y: .byte 0
temp_a: .byte 0
@@ -21,363 +19,381 @@ counted: .word 0
xpos: .byte 0
ypos: .byte 0
.code
.code
chars:
.incbin "cga2.chr"
hex2asc: .byte "0123456789abcdef"
format: .byte "IrqNmiCountXposYpos", 0
xdesc: .byte "0123456789abcdefghijklmnopqrstuv", 0
ydesc: .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
.incbin "cga2.chr"
.proc nmi
inc nmi_count
rts
hex2asc: .byte "0123456789abcdef"
format: .byte "IrqNmiCountXposYpos", 0
xdesc: .byte "0123456789abcdefghijklmnopqrstuv", 0
ydesc: .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
;-------------------------------------------------------------------------------
.proc nmi
inc nmi_count
rts
.endproc
.export IRQStub
.proc irq
inc irq_count
lda count
sta counted
lda count+1
sta counted+1
lda #0
sta count
sta count+1
rts
.proc IRQStub
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
.proc _main
lda #lcd_x_pos_plane2_flag
sta lcd_x
lda #<xdesc
ldx #>xdesc
ldy #128
jsr printstring
lda #0
sta LCD_XPOS
sta LCD_YPOS
cli
lda #LCD_MODE_INC_Y
sta LCD_MODE
lda #0
sta lcd_x
lda #<ydesc
ldx #>ydesc
ldy #0
sty lcd_y
jsr printstringy
lda #0
sta LCD_X
lda #<xdesc
ldx #>xdesc
ldy #0
jsr printstring
; 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 #LCD_XPOS_PLANE2
sta LCD_X
lda #<xdesc
ldx #>xdesc
ldy #128
jsr printstring
lda #<format
ldx #>format
ldy #8
jsr printstring
lda #0
sta LCD_X
lda #<ydesc
ldx #>ydesc
ldy #0
sty LCD_Y
jsr printstringy
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 #$90;(LCD_XPOS_PLANE2|(128/8))
lda #(LCD_XPOS_PLANE2|(128/8))
sta LCD_X
lda #<ydesc
ldx #>ydesc
ldy #0
sty LCD_Y
jsr printstringy
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 #<format
ldx #>format
ldy #8
jsr printstring
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 #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_XPOS_PLANE2|(48/8)
sta LCD_X
lda #48
sta LCD_Y
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
sta nmi_enable
lda #1
sta ZP_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
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
jsr inputs
lda #LCD_MODE_INC_Y
sta LCD_MODE
jsr printy
jmp loop
jmp loop
.endproc
;-------------------------------------------------------------------------------
.proc printy
ldx #0
ldy #16
lda irq_count
jsr printhex
ldx #0
ldy #16
lda irq_count
jsr printhex
ldx #3
ldy #16
lda nmi_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 #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
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
lda JOY_DATA
and #JOY_DATA_UP
bne notup
dec ypos
lda ypos
sta LCD_YPOS
notup:lda JOY_DATA
and #JOY_DATA_DOWN
bne notdown
inc ypos
lda ypos
sta LCD_YPOS
notdown:lda JOY_DATA
and #JOY_DATA_LEFT
bne notleft
dec xpos
lda xpos
sta LCD_XPOS
notleft:lda JOY_DATA
and #JOY_DATA_RIGHT
bne notright
inc xpos
lda xpos
sta LCD_XPOS
notright:lda JOY_DATA
and #JOY_DATA_START
bne notstart
notstart:lda JOY_DATA
and #JOY_DATA_SELECT
bne notselect
notselect:lda JOY_DATA
and #JOY_DATA_FIRE_A
bne notbuttona
notbuttona:lda JOY_DATA
and #JOY_DATA_FIRE_B
bne notbuttonb
notbuttonb:rts
.endproc
;-------------------------------------------------------------------------------
.proc printstring
sta psa
stx psa+1
ldx #0
stx psx
sty psy
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
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
rts
.endproc
.proc printstringy
sta psa
stx psa+1
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
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
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
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
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
lda (addr),y
sta LCD_DATA
iny
dex
bne printsign1
ldx temp_x
ldy temp_y
rts
.endproc