; original lcdtest.s by PeT (mess@utanet.at) .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 chars: .incbin "cga2.chr" hex2asc: .byte "0123456789abcdef" format: .byte "IrqNmiCountXposYpos", 0 xdesc: .byte "0123456789abcdefghijklmnopqrstuv", 0 ydesc: .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0 ;------------------------------------------------------------------------------- .export IRQStub, NMIStub .proc NMIStub inc nmi_count rts .endproc .proc IRQStub inc irq_count lda count sta counted lda count+1 sta counted+1 lda #0 sta count sta count+1 rts .endproc ;------------------------------------------------------------------------------- .export Start .proc Start lda #0 sta LCD_XPOS sta LCD_YPOS cli lda #LCD_MODE_INC_Y sta LCD_MODE lda #0 sta LCD_X lda #xdesc ldy #0 jsr printstring lda #LCD_XPOS_PLANE2 sta LCD_X lda #xdesc ldy #128 jsr printstring lda #0 sta LCD_X lda #ydesc ldy #0 sty LCD_Y jsr printstringy ; lda #$90;(LCD_XPOS_PLANE2|(128/8)) lda #(LCD_XPOS_PLANE2|(128/8)) sta LCD_X lda #ydesc ldy #0 sty LCD_Y jsr printstringy lda #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_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 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 jsr inputs lda #LCD_MODE_INC_Y 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 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 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+1 ldx #8 ldy #0 printsign1: lda (addr),y sta LCD_DATA iny dex bne printsign1 ldx temp_x ldy temp_y rts .endproc