style fixes

This commit is contained in:
mrdudz
2015-08-29 15:58:57 +02:00
parent 0e29a0993f
commit 57b8af1adc
22 changed files with 830 additions and 818 deletions

View File

@@ -4,6 +4,8 @@
[![build status](http://travis-ci.org/cc65/cc65.png)](http://travis-ci.org/cc65/cc65/builds) [![build status](http://travis-ci.org/cc65/cc65.png)](http://travis-ci.org/cc65/cc65/builds)
Binary snapshot for [Windows](http://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip)
cc65 is a complete cross development package for 65(C)02 systems, including cc65 is a complete cross development package for 65(C)02 systems, including
a powerful macro assembler, a C compiler, linker, librarian and several a powerful macro assembler, a C compiler, linker, librarian and several
other tools. other tools.
@@ -23,6 +25,7 @@ including
- the Atari 8 bit machines. - the Atari 8 bit machines.
- the Atari 5200 console. - the Atari 5200 console.
- GEOS for the C64, C128 and Apple //e. - GEOS for the C64, C128 and Apple //e.
- the NEC PC-Engine
- the Nintendo Entertainment System (NES) console. - the Nintendo Entertainment System (NES) console.
- the Supervision console. - the Supervision console.
- the Oric Atmos. - the Oric Atmos.

View File

@@ -2,44 +2,44 @@
; PCE definitions. By Groepaz/Hitmem. ; PCE definitions. By Groepaz/Hitmem.
; ;
;; FIXME: optimize zeropage usage ; FIXME: optimize zeropage usage
CURS_X = $30
CURS_Y = $31
SCREEN_PTR = $32 ;2
CRAM_PTR = $34 ;2
CHARCOLOR = $36
RVS = $37
BGCOLOR = $38
tickcount = $39 ;4
CURS_X = $30 ; FIXME: screen dimensions my change according to selected video mode
CURS_Y = $31 screenrows = (224/8)
SCREEN_PTR = $32 ;2 charsperline = 61
CRAM_PTR = $34 ;2
CHARCOLOR = $36
RVS = $37
BGCOLOR = $38
tickcount = $39 ;4
screenrows = (224/8) CH_HLINE = 1
charsperline = 61 CH_VLINE = 2
CH_HLINE = 1
CH_VLINE = 2
; huc6270 - Video Display Controller (vdc) ; huc6270 - Video Display Controller (vdc)
VDC_MAWR = 0 ; Memory Address Write Register VDC_MAWR = 0 ; Memory Address Write Register
VDC_MARR = 1 ; Memory Address Read Register VDC_MARR = 1 ; Memory Address Read Register
VDC_VWR = 2 ; VRAM Write Register VDC_VWR = 2 ; VRAM Write Register
VDC_VRR = 3 ; VRAM Read Register VDC_VRR = 3 ; VRAM Read Register
VDC_CR = 4 ; Control Register VDC_CR = 4 ; Control Register
VDC_RCR = 5 ; Raster Counter Register VDC_RCR = 5 ; Raster Counter Register
VDC_BXR = 6 ; Background X-Scroll Register VDC_BXR = 6 ; Background X-Scroll Register
VDC_BYR = 7 ; Background Y-Scroll Register VDC_BYR = 7 ; Background Y-Scroll Register
VDC_MWR = 8 ; Memory-access Width Register VDC_MWR = 8 ; Memory-access Width Register
VDC_HSR = 9 ; Horizontal Sync Register (?) VDC_HSR = 9 ; Horizontal Sync Register (?)
VDC_HDR =10 ; Horizontal Display Register (?) VDC_HDR = 10 ; Horizontal Display Register (?)
VDC_VPR =11 ; (unknown) VDC_VPR = 11 ; (unknown)
VDC_VDW =12 ; (unknown use) VDC_VDW = 12 ; (unknown use)
VDC_VCR =13 ; (unknown use) VDC_VCR = 13 ; (unknown use)
VDC_DCR =14 ; (DMA) Control Register VDC_DCR = 14 ; (DMA) Control Register
VDC_SOUR =15 ; (DMA) Source Register VDC_SOUR = 15 ; (DMA) Source Register
VDC_DESR =16 ; (DMA) Destination Register VDC_DESR = 16 ; (DMA) Destination Register
VDC_LENR =17 ; (DMA) Length Register VDC_LENR = 17 ; (DMA) Length Register
VDC_SATB =18 ; Sprite Attribute Table VDC_SATB = 18 ; Sprite Attribute Table
; VDC port ; VDC port
; Note: absolute addressing mode must be used when writing to this port ; Note: absolute addressing mode must be used when writing to this port
@@ -54,21 +54,21 @@ VDC_DATA_HI = $0003
; bitmap of the palette data is this: 0000000gggrrrbbb. ; bitmap of the palette data is this: 0000000gggrrrbbb.
; You can read and write the DAC-registers. ; You can read and write the DAC-registers.
VCE = $0400 ; base VCE = $0400 ; base
VCE_CTRL = $0400 ; write$00 to reset VCE_CTRL = $0400 ; write$00 to reset
VCE_ADDR_LO = $0402 ; LSB of byte offset into palette VCE_ADDR_LO = $0402 ; LSB of byte offset into palette
VCE_ADDR_HI = $0403 ; MSB of byte offset into palette VCE_ADDR_HI = $0403 ; MSB of byte offset into palette
VCE_DATA_LO = $0404 ; LSB of 16-bit palette data VCE_DATA_LO = $0404 ; LSB of 16-bit palette data
VCE_DATA_HI = $0405 ; MSB of 16-bit palette data VCE_DATA_HI = $0405 ; MSB of 16-bit palette data
; programmable sound generator (PSG) ; programmable sound generator (PSG)
PSG = $0800 ; base PSG = $0800 ; base
; timer ; timer
TIMER = $0c00 ; base TIMER = $0c00 ; base
TIMER_COUNT = $0c00 TIMER_COUNT = $0c00
TIMER_CTRL = $0c01 TIMER_CTRL = $0c01

View File

@@ -36,20 +36,20 @@
# error This module may only be used when compiling for the PCE! # error This module may only be used when compiling for the PCE!
#endif #endif
#define CH_HLINE 1 #define CH_HLINE 1
#define CH_VLINE 2 #define CH_VLINE 2
#define CH_CROSS 3 #define CH_CROSS 3
#define CH_ULCORNER 4 #define CH_ULCORNER 4
#define CH_URCORNER 5 #define CH_URCORNER 5
#define CH_LLCORNER 6 #define CH_LLCORNER 6
#define CH_LRCORNER 7 #define CH_LRCORNER 7
#define CH_TTEE 8 #define CH_TTEE 8
#define CH_BTEE 9 #define CH_BTEE 9
#define CH_LTEE 10 #define CH_LTEE 10
#define CH_RTEE 11 #define CH_RTEE 11
#define CH_ENTER 13 #define CH_ENTER 13
#define CH_PI 18 #define CH_PI 18
/* Color defines (CBM compatible, for conio) */ /* Color defines (CBM compatible, for conio) */
#define COLOR_BLACK 0x00 #define COLOR_BLACK 0x00
@@ -77,7 +77,7 @@
#define DYN_DRV 0 #define DYN_DRV 0
/* The addresses of the static drivers */ /* The addresses of the static drivers */
extern void pce_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ extern void pce_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
#define JOY_FIRE_B 5 #define JOY_FIRE_B 5
#define JOY_SELECT 6 #define JOY_SELECT 6
@@ -87,7 +87,7 @@ void waitvblank (void);
/* Wait for the vertical blanking */ /* Wait for the vertical blanking */
/* NOTE: all PCE are NTSC */ /* NOTE: all PCE are NTSC */
#define get_tv() TV_NTSC #define get_tv() TV_NTSC
/* Return the video mode the machine is using. */ /* Return the video mode the machine is using. */
/* End of pce.h */ /* End of pce.h */

View File

@@ -1,18 +1,18 @@
; ;
; Screen size variables ; Screen size variables
; ;
.include "pce.inc" .include "pce.inc"
.export screensize .export screensize
screensize: screensize:
ldx xsize ldx xsize
ldy ysize ldy ysize
rts rts
; FIXME: changing the video mode allows for different screen sizes ; FIXME: changing the video mode allows for different screen sizes
.rodata .rodata
.export xsize, ysize .export xsize, ysize
xsize: .byte charsperline xsize: .byte charsperline
ysize: .byte screenrows ysize: .byte screenrows

View File

@@ -2,30 +2,29 @@
; clock_t clock (void); ; clock_t clock (void);
; ;
.include "pce.inc" .include "pce.inc"
.export _clock .export _clock
.importzp sreg .importzp sreg
;; .importzp tickcount
.proc _clock .proc _clock
lda tickcount+3 lda tickcount+3
sta sreg+1 sta sreg+1
lda tickcount+2 lda tickcount+2
sta sreg sta sreg
ldx tickcount+1 ldx tickcount+1
lda tickcount lda tickcount
rts rts
.endproc .endproc
.constructor initclock, 24 .constructor initclock, 24
initclock: initclock:
lda #0 lda #0
ldx #3 ldx #3
@lp: sta tickcount,x @lp: sta tickcount,x
dex dex
bpl @lp bpl @lp
rts rts

View File

@@ -1,30 +1,32 @@
.include "pce.inc" .include "pce.inc"
.export _clrscr .export _clrscr
_clrscr: _clrscr:
st0 #VDC_MAWR st0 #VDC_MAWR
st1 #<$0000 st1 #<$0000
st2 #>$0000 st2 #>$0000
st0 #VDC_VWR st0 #VDC_VWR
ldy #$40 ldy #$40
rowloop: ldx #$80 rowloop:
colloop: lda #' ' ldx #$80
sta a:VDC_DATA_LO colloop:
lda #$02 lda #' '
sta a:VDC_DATA_HI sta a:VDC_DATA_LO
lda #$02
sta a:VDC_DATA_HI
dex dex
bne colloop bne colloop
dey dey
bne rowloop bne rowloop
rts rts
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; force the init constructor to be imported ; force the init constructor to be imported
.import initconio .import initconio
conio_init = initconio conio_init = initconio

View File

@@ -5,59 +5,60 @@
; ;
.export _textcolor, _bgcolor, _bordercolor .export _textcolor, _bgcolor, _bordercolor
.include "pce.inc" .include "pce.inc"
_textcolor: _textcolor:
ldx CHARCOLOR ; get old value ldx CHARCOLOR ; get old value
sta CHARCOLOR ; set new value sta CHARCOLOR ; set new value
txa txa
rts rts
_bgcolor: _bgcolor:
ldx BGCOLOR ; get old value ldx BGCOLOR ; get old value
sta BGCOLOR ; set new value sta BGCOLOR ; set new value
asl a asl a
tay tay
stz VCE_ADDR_LO stz VCE_ADDR_LO
stz VCE_ADDR_HI stz VCE_ADDR_HI
lda colors,y lda colors,y
sta VCE_DATA_LO sta VCE_DATA_LO
lda colors+1,y lda colors+1,y
sta VCE_DATA_HI sta VCE_DATA_HI
txa txa
rts rts
_bordercolor: _bordercolor:
lda #0 lda #0
txa txa
rts rts
.export colors .export colors
colors: ; G R B colors:
.word ((0<<6)+(0<<3)+(0)) ; 0 black ; G R B
.word ((7<<6)+(7<<3)+(7)) ; 1 white .word ((0<<6)+(0<<3)+(0)) ; 0 black
.word ((0<<6)+(7<<3)+(0)) ; 2 red .word ((7<<6)+(7<<3)+(7)) ; 1 white
.word ((7<<6)+(0<<3)+(7)) ; 3 cyan .word ((0<<6)+(7<<3)+(0)) ; 2 red
.word ((0<<6)+(5<<3)+(7)) ; 4 violett .word ((7<<6)+(0<<3)+(7)) ; 3 cyan
.word ((7<<6)+(0<<3)+(0)) ; 5 green .word ((0<<6)+(5<<3)+(7)) ; 4 violett
.word ((0<<6)+(0<<3)+(7)) ; 6 blue .word ((7<<6)+(0<<3)+(0)) ; 5 green
.word ((7<<6)+(7<<3)+(0)) ; 7 yellow .word ((0<<6)+(0<<3)+(7)) ; 6 blue
.word ((5<<6)+(7<<3)+(0)) ; 8 orange .word ((7<<6)+(7<<3)+(0)) ; 7 yellow
.word ((3<<6)+(4<<3)+(3)) ; 9 brown .word ((5<<6)+(7<<3)+(0)) ; 8 orange
.word ((4<<6)+(7<<3)+(4)) ; a light red .word ((3<<6)+(4<<3)+(3)) ; 9 brown
.word ((3<<6)+(3<<3)+(3)) ; b dark grey .word ((4<<6)+(7<<3)+(4)) ; a light red
.word ((4<<6)+(4<<3)+(4)) ; c middle grey .word ((3<<6)+(3<<3)+(3)) ; b dark grey
.word ((7<<6)+(4<<3)+(4)) ; d light green .word ((4<<6)+(4<<3)+(4)) ; c middle grey
.word ((4<<6)+(4<<3)+(7)) ; e light blue .word ((7<<6)+(4<<3)+(4)) ; d light green
.word ((6<<6)+(6<<3)+(6)) ; f light gray .word ((4<<6)+(4<<3)+(7)) ; e light blue
.word ((6<<6)+(6<<3)+(6)) ; f light gray
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; force the init constructor to be imported ; force the init constructor to be imported
.import initconio .import initconio
conio_init = initconio conio_init = initconio

View File

@@ -1,121 +1,123 @@
.include "pce.inc" .include "pce.inc"
.import vce_init .import vce_init
.import psg_init .import psg_init
.import vdc_init .import vdc_init
.constructor initconio, 24 .constructor initconio, 24
.macpack longbranch
.macpack longbranch
initconio: initconio:
;; jsr vdc_init jsr vce_init
jsr vce_init jsr psg_init
jsr psg_init jsr conio_init
jsr conio_init jsr set_palette
jsr set_palette
st0 #VDC_RCR st0 #VDC_RCR
st1 #<$0088 st1 #<$0088
st2 #>$0088 st2 #>$0088
rts rts
.import colors .import colors
set_palette: set_palette:
stz VCE_ADDR_LO stz VCE_ADDR_LO
stz VCE_ADDR_HI stz VCE_ADDR_HI
ldx #0 ldx #0
@lp: @lp:
ldy #16 ldy #16
@lp1: @lp1:
lda colors,x lda colors,x
sta VCE_DATA_LO sta VCE_DATA_LO
lda colors+1,x lda colors+1,x
sta VCE_DATA_HI sta VCE_DATA_HI
dey dey
bne @lp1 bne @lp1
inx inx
inx inx
cpx #16*2 cpx #16*2
jne @lp jne @lp
stz VCE_ADDR_LO stz VCE_ADDR_LO
stz VCE_ADDR_HI stz VCE_ADDR_HI
stz VCE_DATA_LO stz VCE_DATA_LO
stz VCE_DATA_HI stz VCE_DATA_HI
rts rts
;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------
; ;
;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------
.importzp ptr1, tmp1 .importzp ptr1, tmp1
conio_init: conio_init:
; Load font ; Load font
st0 #VDC_MAWR st0 #VDC_MAWR
st1 #<$2000 st1 #<$2000
st2 #>$2000 st2 #>$2000
; ptr to font data ; ptr to font data
lda #<font lda #<font
sta ptr1 sta ptr1
lda #>font lda #>font
sta ptr1+1 sta ptr1+1
st0 #VDC_VWR ; VWR st0 #VDC_VWR ; VWR
lda #0 lda #0
sta tmp1 sta tmp1
jsr copy jsr copy
lda #<font lda #<font
sta ptr1 sta ptr1
lda #>font lda #>font
sta ptr1+1 sta ptr1+1
lda #$ff lda #$ff
sta tmp1 sta tmp1
jsr copy jsr copy
ldx #0 ldx #0
stx BGCOLOR stx BGCOLOR
inx inx
stx CHARCOLOR stx CHARCOLOR
rts rts
copy: copy:
ldy #$80 ; 128 chars ldy #$80 ; 128 chars
charloop: ldx #$08 ; 8 bytes/char charloop:
ldx #$08 ; 8 bytes/char
lineloop: lineloop:
lda (ptr1) lda (ptr1)
eor tmp1 eor tmp1
sta a:VDC_DATA_LO ; bitplane 0 sta a:VDC_DATA_LO ; bitplane 0
stz a:VDC_DATA_HI ; bitplane 1 stz a:VDC_DATA_HI ; bitplane 1
clc ; increment font pointer clc ; increment font pointer
lda ptr1 lda ptr1
adc #$01 adc #$01
sta ptr1 sta ptr1
lda ptr1+1 lda ptr1+1
adc #$00 adc #$00
sta ptr1+1 sta ptr1+1
dex dex
bne lineloop ; next bitplane 0 byte bne lineloop ; next bitplane 0 byte
ldx #$08 ; fill bitplane 2/3 with 0 ldx #$08 ; fill bitplane 2/3 with 0
fillloop: st1 #$00 fillloop:
st2 #$00 st1 #$00
dex st2 #$00
bne fillloop ; next byte dex
dey bne fillloop ; next byte
bne charloop ; next character dey
bne charloop ; next character
rts rts
.rodata .rodata
font: font:
.include "vga.inc" .include "vga.inc"

View File

@@ -3,97 +3,96 @@
; void cputc (char c); ; void cputc (char c);
; ;
.export _cputcxy, _cputc, cputdirect, putchar .export _cputcxy, _cputc, cputdirect, putchar
.export newline, plot .export newline, plot
.import popa, _gotoxy .import popa, _gotoxy
.import PLOT .import PLOT
.import xsize .import xsize
.importzp tmp3,tmp4 .importzp tmp3,tmp4
.include "pce.inc"
.include "pce.inc"
_cputcxy: _cputcxy:
pha ; Save C pha ; Save C
jsr popa ; Get Y jsr popa ; Get Y
jsr _gotoxy ; Set cursor, drop x jsr _gotoxy ; Set cursor, drop x
pla ; Restore C pla ; Restore C
; Plot a character - also used as internal function ; Plot a character - also used as internal function
_cputc: cmp #$0d ; CR? _cputc: cmp #$0d ; CR?
bne L1 bne L1
lda #0 lda #0
sta CURS_X sta CURS_X
beq plot ; Recalculate pointers beq plot ; Recalculate pointers
L1: cmp #$0a ; LF? L1: cmp #$0a ; LF?
beq newline ; Recalculate pointers beq newline ; Recalculate pointers
; Printable char of some sort ; Printable char of some sort
cputdirect: cputdirect:
jsr putchar ; Write the character to the screen jsr putchar ; Write the character to the screen
; Advance cursor position ; Advance cursor position
advance: advance:
ldy CURS_X ldy CURS_X
iny iny
cpy xsize cpy xsize
bne L3 bne L3
jsr newline ; new line jsr newline ; new line
ldy #0 ; + cr ldy #0 ; + cr
L3: sty CURS_X L3: sty CURS_X
jmp plot jmp plot
newline: newline:
inc CURS_Y inc CURS_Y
; Set cursor position, calculate RAM pointers ; Set cursor position, calculate RAM pointers
plot: ldy CURS_X plot: ldy CURS_X
ldx CURS_Y ldx CURS_Y
clc clc
jmp PLOT ; Set the new cursor jmp PLOT ; Set the new cursor
; Write one character to the screen without doing anything else, return X ; Write one character to the screen without doing anything else, return X
; position in Y ; position in Y
putchar: putchar:
ora RVS ; Set revers bit ora RVS ; Set revers bit
tax tax
st0 #VDC_MAWR ; Memory Adress Write st0 #VDC_MAWR ; Memory Adress Write
lda SCREEN_PTR lda SCREEN_PTR
sta a:VDC_DATA_LO sta a:VDC_DATA_LO
lda SCREEN_PTR+1 lda SCREEN_PTR + 1
sta a:VDC_DATA_HI sta a:VDC_DATA_HI
st0 #VDC_VWR ; VWR st0 #VDC_VWR ; VWR
txa txa
sta a:VDC_DATA_LO ; character sta a:VDC_DATA_LO ; character
lda CHARCOLOR lda CHARCOLOR
asl a asl a
asl a asl a
asl a asl a
asl a asl a
ora #$02 ora #$02
sta a:VDC_DATA_HI sta a:VDC_DATA_HI
rts rts
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; force the init constructor to be imported ; force the init constructor to be imported
.import initconio .import initconio
conio_init = initconio conio_init = initconio

View File

@@ -7,153 +7,155 @@
; This must be the *first* file on the linker command line ; This must be the *first* file on the linker command line
; ;
.export _exit .export _exit
.export __STARTUP__ : absolute = 1 ; Mark as startup .export __STARTUP__ : absolute = 1 ; Mark as startup
.import initlib, donelib .import initlib, donelib
.import push0, _main, zerobss .import push0, _main, zerobss
.import initheap .import initheap
.import tmp1,tmp2,tmp3 .import tmp1,tmp2,tmp3
; Linker generated ; Linker generated
.import __RAM_START__, __RAM_SIZE__ .import __RAM_START__, __RAM_SIZE__
.import __ROM0_START__, __ROM0_SIZE__ .import __ROM0_START__, __ROM0_SIZE__
.import __ROM_START__, __ROM_SIZE__ .import __ROM_START__, __ROM_SIZE__
.import __STARTUP_LOAD__,__STARTUP_RUN__, __STARTUP_SIZE__ .import __STARTUP_LOAD__,__STARTUP_RUN__, __STARTUP_SIZE__
.import __CODE_LOAD__,__CODE_RUN__, __CODE_SIZE__ .import __CODE_LOAD__,__CODE_RUN__, __CODE_SIZE__
.import __RODATA_LOAD__,__RODATA_RUN__, __RODATA_SIZE__ .import __RODATA_LOAD__,__RODATA_RUN__, __RODATA_SIZE__
.import __DATA_LOAD__,__DATA_RUN__, __DATA_SIZE__ .import __DATA_LOAD__,__DATA_RUN__, __DATA_SIZE__
.import __BSS_SIZE__ .import __BSS_SIZE__
.include "pce.inc" .include "pce.inc"
.importzp sp .importzp sp
.importzp ptr1,ptr2 .importzp ptr1,ptr2
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Place the startup code in a special segment. ; Place the startup code in a special segment.
.segment "STARTUP" .segment "STARTUP"
start: start:
; setup the CPU and System-IRQ ; setup the CPU and System-IRQ
; Initialize CPU ; Initialize CPU
sei sei
nop nop
csh ; set high speed CPU mode csh ; set high speed CPU mode
nop nop
cld cld
nop nop
; Setup stack and memory mapping ; Setup stack and memory mapping
ldx #$FF ; Stack top ($21FF) ldx #$FF ; Stack top ($21FF)
txs txs
; at startup all MPRs are set to 0, so init them ; at startup all MPRs are set to 0, so init them
lda #$ff lda #$ff
tam #%00000001 ; 0000-1FFF = Hardware page tam #%00000001 ; 0000-1FFF = Hardware page
lda #$F8 lda #$F8
tam #%00000010 ; 2000-3FFF = Work RAM tam #%00000010 ; 2000-3FFF = Work RAM
;lda #$F7
;tam #%00000100 ; 4000-5FFF = Save RAM
;lda #1
;tam #%00001000 ; 6000-7FFF Page 2
;lda #2
;tam #%00010000 ; 8000-9FFF Page 3
;lda #3
;tam #%00100000 ; A000-BFFF Page 4
;lda #4
;tam #%01000000 ; C000-DFFF Page 5
;lda #0
;tam #%10000000 ; e000-fFFF hucard/syscard bank 0
; Clear work RAM (2000-3FFF) ; FIXME: setup a larger block of memory to use with C-code
stz <$00 ;lda #$F7
tii $2000, $2001, $1FFF ;tam #%00000100 ; 4000-5FFF = Save RAM
;lda #1
;tam #%00001000 ; 6000-7FFF Page 2
;lda #2
;tam #%00010000 ; 8000-9FFF Page 3
;lda #3
;tam #%00100000 ; A000-BFFF Page 4
;lda #4
;tam #%01000000 ; C000-DFFF Page 5
;lda #0
;tam #%10000000 ; e000-fFFF hucard/syscard bank 0
; Initialize hardware ; Clear work RAM (2000-3FFF)
stz TIMER_COUNT ; Timer off stz <$00
lda #$07 tii $2000, $2001, $1FFF
sta IRQ_MASK ; Interrupts off
stz IRQ_STATUS ; Acknowledge timer
;; FIXME; i dont know why the heck this one doesnt work when called from a constructor :/ ; Initialize hardware
.import vdc_init stz TIMER_COUNT ; Timer off
jsr vdc_init lda #$07
sta IRQ_MASK ; Interrupts off
stz IRQ_STATUS ; Acknowledge timer
; Turn on background and VD interrupt/IRQ1 ; FIXME; i dont know why the heck this one doesnt work when called from a constructor :/
lda #$05 .import vdc_init
sta IRQ_MASK ; IRQ1=on jsr vdc_init
; Clear the BSS data ; Turn on background and VD interrupt/IRQ1
jsr zerobss lda #$05
sta IRQ_MASK ; IRQ1=on
; Copy the .data segment to RAM ; Clear the BSS data
lda #<(__DATA_LOAD__) jsr zerobss
sta ptr1
lda #>(__DATA_LOAD__)
sta ptr1+1
lda #<(__DATA_RUN__)
sta ptr2
lda #>(__DATA_RUN__)
sta ptr2+1
ldx #>(__DATA_SIZE__) ; Copy the .data segment to RAM
lda #<(__DATA_LOAD__)
sta ptr1
lda #>(__DATA_LOAD__)
sta ptr1+1
lda #<(__DATA_RUN__)
sta ptr2
lda #>(__DATA_RUN__)
sta ptr2+1
ldx #>(__DATA_SIZE__)
@l2: @l2:
beq @s1 ; no more full pages beq @s1 ; no more full pages
; copy one page ; copy one page
ldy #0 ldy #0
@l1: @l1:
lda (ptr1),y lda (ptr1),y
sta (ptr2),y sta (ptr2),y
iny iny
bne @l1 bne @l1
inc ptr1+1 inc ptr1+1
inc ptr2+1 inc ptr2+1
dex dex
bne @l2 bne @l2
; copy remaining bytes ; copy remaining bytes
@s1: @s1:
; copy one page ; copy one page
ldy #0 ldy #0
@l3: @l3:
lda (ptr1),y lda (ptr1),y
sta (ptr2),y sta (ptr2),y
iny iny
cpy #<(__DATA_SIZE__) cpy #<(__DATA_SIZE__)
bne @l3 bne @l3
; setup the stack ; setup the stack
lda #<(__RAM_START__+__RAM_SIZE__) lda #<(__RAM_START__+__RAM_SIZE__)
sta sp sta sp
lda #>(__RAM_START__+__RAM_SIZE__) lda #>(__RAM_START__+__RAM_SIZE__)
sta sp+1 sta sp + 1
; Call module constructors ; Call module constructors
jsr initlib jsr initlib
cli ; allow IRQ only after constructors have run cli ; allow IRQ only after constructors have run
; Pass an empty command line ; Pass an empty command line
jsr push0 ; argc jsr push0 ; argc
jsr push0 ; argv jsr push0 ; argv
ldy #4 ; Argument size ldy #4 ; Argument size
jsr _main ; call the users code jsr _main ; call the users code
; Call module destructors. This is also the _exit entry. ; Call module destructors. This is also the _exit entry.
_exit: _exit:
jsr donelib ; Run module destructors jsr donelib ; Run module destructors
; reset the PCEngine (start over) ; reset the PCEngine (start over)
jmp start jmp start
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; System V-Blank Interupt ; System V-Blank Interupt
@@ -161,45 +163,45 @@ _exit:
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
_irq1: _irq1:
pha pha
phx phx
phy phy
; increment the system tick counter
inc tickcount inc tickcount
bne @s1 bne @s1
inc tickcount+1 inc tickcount + 1
bne @s1 bne @s1
inc tickcount+2 inc tickcount + 2
bne @s1 bne @s1
inc tickcount+3 inc tickcount + 3
@s1: @s1:
; Acknowlege interrupt ; Acknowlege interrupt
lda a:VDC_CTRL lda a:VDC_CTRL
ply ply
plx plx
pla pla
rti rti
_irq2: _irq2:
rti rti
_nmi: _nmi:
rti rti
_timer: _timer:
stz IRQ_STATUS stz IRQ_STATUS
rti rti
.export initmainargs .export initmainargs
initmainargs: initmainargs:
rts rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; hardware vectors ; hardware vectors
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
.segment "VECTORS" .segment "VECTORS"
.word _irq2 ; $fff6 IRQ2 (External IRQ, BRK) .word _irq2 ; $fff6 IRQ2 (External IRQ, BRK)
.word _irq1 ; $fff8 IRQ1 (VDC) .word _irq1 ; $fff8 IRQ1 (VDC)
.word _timer ; $fffa Timer .word _timer ; $fffa Timer
.word _nmi ; $fffc NMI .word _nmi ; $fffc NMI
.word start ; $fffe reset .word start ; $fffe reset

View File

@@ -2,20 +2,20 @@
; void gotoxy (unsigned char x, unsigned char y); ; void gotoxy (unsigned char x, unsigned char y);
; ;
.export _gotoxy .export _gotoxy
.import popa, plot .import popa, plot
.include "pce.inc" .include "pce.inc"
_gotoxy: _gotoxy:
sta CURS_Y ; Set Y sta CURS_Y ; Set Y
jsr popa ; Get X jsr popa ; Get X
sta CURS_X ; Set X sta CURS_X ; Set X
jmp plot ; Set the cursor position jmp plot ; Set the cursor position
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; force the init constructor to be imported ; force the init constructor to be imported
.import initconio .import initconio
conio_init = initconio conio_init = initconio

View File

@@ -5,6 +5,7 @@
.include "joy-kernel.inc" .include "joy-kernel.inc"
.include "joy-error.inc" .include "joy-error.inc"
.include "pce.inc"
.macpack module .macpack module
@@ -58,10 +59,10 @@ JOY_COUNT = 4 ; Number of joysticks we support
; ;
INSTALL: INSTALL:
lda #<JOY_ERR_OK lda #<JOY_ERR_OK
ldx #>JOY_ERR_OK ldx #>JOY_ERR_OK
; rts ; Run into DEINSTALL instead ; rts ; Run into UNINSTALL instead
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; DEINSTALL routine. Is called before the driver is removed from memory. ; DEINSTALL routine. Is called before the driver is removed from memory.
@@ -69,7 +70,7 @@ INSTALL:
; ;
UNINSTALL: UNINSTALL:
rts rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
@@ -78,9 +79,9 @@ UNINSTALL:
;unsigned char __fastcall__ joy_count (void); ;unsigned char __fastcall__ joy_count (void);
COUNT: COUNT:
lda #<JOY_COUNT lda #<JOY_COUNT
ldx #>JOY_COUNT ldx #>JOY_COUNT
rts rts
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; READ: Read a particular joystick passed in A. ; READ: Read a particular joystick passed in A.
@@ -88,70 +89,71 @@ COUNT:
;unsigned char __fastcall__ joy_read (unsigned char joystick); ;unsigned char __fastcall__ joy_read (unsigned char joystick);
READJOY: READJOY:
pha pha
jsr read_joy jsr read_joy
pla pla
tax ; Joystick number into X tax ; Joystick number into X
; return value from buffer ; return value from buffer
joy1: joy1:
lda padbuffer,x lda padbuffer,x
ldx #0 ldx #0
rts rts
read_joy: read_joy:
; reset multitap counter ; reset multitap counter
lda #$01 lda #$01
sta $1000 sta JOY_CTRL
pha pha
pla pla
nop nop
nop nop
lda #$03 lda #$03
sta $1000 sta JOY_CTRL
pha pha
pla pla
nop nop
nop nop
cly cly
nextpad: nextpad:
lda #$01 lda #$01
sta $1000 ; sel = 1 sta JOY_CTRL ; sel = 1
pha pha
pla pla
nop nop ; some delay is required
nop nop
lda $1000 lda JOY_CTRL
asl a asl a
asl a asl a
asl a asl a
asl a asl a
sta padbuffer, y ; store new value sta padbuffer, y ; store new value
stz $1000 stz JOY_CTRL
pha pha
pla pla
nop
nop
lda $1000 nop ; some delay is required
and #$0F nop
ora padbuffer, y ; second half of new value
eor #$FF lda JOY_CTRL
sta padbuffer, y ; store new value and #$0F
ora padbuffer, y ; second half of new value
iny eor #$FF
cpy #$05 sta padbuffer, y ; store new value
bcc nextpad
rts iny
cpy #$05
bcc nextpad
rts
.bss .bss
padbuffer: padbuffer:
.res 4 .res 4

View File

@@ -6,9 +6,9 @@
; const void joy_static_stddrv[]; ; const void joy_static_stddrv[];
; ;
.export _joy_static_stddrv .export _joy_static_stddrv
.import _pce_stdjoy_joy .import _pce_stdjoy_joy
.rodata .rodata
_joy_static_stddrv := _pce_stdjoy_joy _joy_static_stddrv := _pce_stdjoy_joy

View File

@@ -6,7 +6,7 @@
; const char joy_stddrv[]; ; const char joy_stddrv[];
; ;
.export _joy_stddrv .export _joy_stddrv
.rodata .rodata

View File

@@ -1,37 +1,36 @@
.export PLOT .export PLOT
.include "pce.inc" .include "pce.inc"
PLOT: PLOT:
bcs @getpos bcs @getpos
tya tya
clc clc
adc _plotlo,x adc _plotlo,x
sta SCREEN_PTR sta SCREEN_PTR
lda _plothi,x lda _plothi,x
adc #0 adc #0
sta SCREEN_PTR+1 sta SCREEN_PTR+1
@getpos: @getpos:
ldx CURS_Y ldx CURS_Y
ldy CURS_X ldy CURS_X
rts rts
_plotlo: _plotlo:
.repeat screenrows,line .repeat screenrows,line
.byte <($0000+(line*$80)) .byte <($0000+(line*$80))
.endrepeat .endrepeat
_plothi: _plothi:
.repeat screenrows,line .repeat screenrows,line
.byte >($0000+(line*$80)) .byte >($0000+(line*$80))
.endrepeat .endrepeat
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; force the init constructor to be imported ; force the init constructor to be imported
.import initconio .import initconio
conio_init = initconio conio_init = initconio

View File

@@ -1,29 +1,29 @@
.include "pce.inc" .include "pce.inc"
.export psg_init .export psg_init
psg_init: psg_init:
clx clx
stx $0800 ; Select channel stx $0800 ; Select channel
psg_clear_loop: psg_clear_loop:
stz $0801 ; Clear global balance stz $0801 ; Clear global balance
stz $0802 ; Clear frequency LSB stz $0802 ; Clear frequency LSB
stz $0803 ; Clear frequency MSB stz $0803 ; Clear frequency MSB
stz $0804 ; Clear volume stz $0804 ; Clear volume
stz $0805 ; Clear balance stz $0805 ; Clear balance
stz $0807 ; Clear noise control stz $0807 ; Clear noise control
stz $0808 ; Clear LFO frequency stz $0808 ; Clear LFO frequency
stz $0809 ; Clear LFO control stz $0809 ; Clear LFO control
cly cly
psg_clear_waveform: stz $0806 ; Clear waveform byte psg_clear_waveform:
iny stz $0806 ; Clear waveform byte
cpy #$20 iny
bne psg_clear_waveform cpy #$20
bne psg_clear_waveform
inx
cpx #$06
bne psg_clear_loop
rts
inx
cpx #$06
bne psg_clear_loop
rts

View File

@@ -1,27 +1,27 @@
.include "pce.inc" .include "pce.inc"
.export _revers .export _revers
.proc _revers .proc _revers
ldx #$00 ; Assume revers off ldx #$00 ; Assume revers off
tay ; Test onoff tay ; Test onoff
beq L1 ; Jump if off beq L1 ; Jump if off
ldx #$80 ; Load on value ldx #$80 ; Load on value
ldy #$00 ; Assume old value is zero ldy #$00 ; Assume old value is zero
L1: lda RVS ; Load old value L1: lda RVS ; Load old value
stx RVS ; Set new value stx RVS ; Set new value
beq L2 ; Jump if old value zero beq L2 ; Jump if old value zero
iny ; Make old value = 1 iny ; Make old value = 1
L2: ldx #$00 ; Load high byte of result L2: ldx #$00 ; Load high byte of result
tya ; Load low byte, set CC tya ; Load low byte, set CC
rts rts
.endproc .endproc
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; force the init constructor to be imported ; force the init constructor to be imported
.import initconio .import initconio
conio_init = initconio conio_init = initconio

View File

@@ -1,17 +1,20 @@
.include "pce.inc" .include "pce.inc"
.export vce_init .export vce_init
vce_init: vce_init:
stz VCE_ADDR_LO ; ; Set CTA to zero
stz VCE_ADDR_HI ; Set CTA to zero stz VCE_ADDR_LO
ldy #$01 stz VCE_ADDR_HI
vce_clear_bank: ldx #$00 ldy #$01
vce_clear_color: stz VCE_DATA_LO ; Clear color (LSB) vce_clear_bank:
stz VCE_DATA_HI ; Clear color (MSB) ldx #$00
dex vce_clear_color:
bne vce_clear_color stz VCE_DATA_LO ; Clear color (LSB)
dey stz VCE_DATA_HI ; Clear color (MSB)
bne vce_clear_bank dex
rts bne vce_clear_color
dey
bne vce_clear_bank
rts

View File

@@ -1,40 +1,41 @@
.include "pce.inc" .include "pce.inc"
HIRES = 1 ; FIXME: implement selection of different video modes at runtime
HIRES = 1
.export vdc_init .export vdc_init
vdc_init: vdc_init:
lda a:VDC_CTRL lda a:VDC_CTRL
VREG $00, $0000 ; MAWR VREG $00, $0000 ; MAWR
VREG $01, $0000 ; MARR VREG $01, $0000 ; MARR
VREG $05, $0000 ; CR VREG $05, $0000 ; CR
VREG $06, $0000 ; RCR VREG $06, $0000 ; RCR
VREG $07, $0000 ; BXR VREG $07, $0000 ; BXR
VREG $08, $0000 ; BYR VREG $08, $0000 ; BYR
VREG $09, $0070 ; MAWR VREG $09, $0070 ; MAWR
VREG $0C, $1702 ; CRTC - VSR VREG $0C, $1702 ; CRTC - VSR
VREG $0D, $00DF ; CRTC - VDS VREG $0D, $00DF ; CRTC - VDS
VREG $0E, $000C ; CRTC - VDE VREG $0E, $000C ; CRTC - VDE
VREG $0F, $0000 ; DCR VREG $0F, $0000 ; DCR
.if HIRES .if HIRES
VREG $0A, $0C02 ; CRTC - HSR VREG $0A, $0C02 ; CRTC - HSR
VREG $0B, $043C ; CRTC - HDS VREG $0B, $043C ; CRTC - HDS
lda #$06 lda #$06
sta VCE_CTRL sta VCE_CTRL
.else .else
VREG $0A, $0202 ; CRTC - HSR VREG $0A, $0202 ; CRTC - HSR
VREG $0B, $041F ; CRTC - HDS VREG $0B, $041F ; CRTC - HDS
lda #$04 lda #$04
sta VCE_CTRL sta VCE_CTRL
.endif .endif
lda a:VDC_CTRL lda a:VDC_CTRL
rts rts

View File

@@ -1,8 +1,8 @@
; VGA charset for the PC-Engine conio implementation ; VGA charset for the PC-Engine conio implementation
.byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00
;;.byte $7E, $81, $A5, $81, $BD, $99, $81, $7E
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
@@ -11,7 +11,7 @@
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
;;.byte $7E, $FF, $DB, $FF, $C3, $E7, $FF, $7E
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
@@ -20,7 +20,7 @@
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
;;.byte $6C, $FE, $FE, $FE, $7C, $38, $10, $00
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
@@ -29,7 +29,7 @@
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
;;.byte $10, $38, $7C, $FE, $7C, $38, $10, $00
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
@@ -38,7 +38,7 @@
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
;;.byte $38, $7C, $38, $FE, $FE, $7C, $38, $7C
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
@@ -47,7 +47,7 @@
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
;;.byte $10, $10, $38, $7C, $FE, $7C, $38, $7C
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
@@ -56,7 +56,7 @@
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
;;.byte $00, $00, $18, $3C, $3C, $18, $00, $00
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
@@ -65,7 +65,7 @@
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
;;.byte $FF, $FF, $E7, $C3, $C3, $E7, $FF, $FF
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
@@ -74,7 +74,7 @@
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
;;.byte $00, $3C, $66, $42, $42, $66, $3C, $00
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
@@ -83,7 +83,7 @@
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
.byte %00000000 .byte %00000000
;;.byte $FF, $C3, $99, $BD, $BD, $99, $C3, $FF
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
@@ -92,7 +92,7 @@
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
;;.byte $0F, $07, $0F, $7D, $CC, $CC, $CC, $78
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
@@ -101,119 +101,120 @@
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte %00010000 .byte %00010000
.byte $3C, $66, $66, $66, $3C, $18, $7E, $18
.byte $3F, $33, $3F, $30, $30, $70, $F0, $E0 .byte $3C, $66, $66, $66, $3C, $18, $7E, $18
.byte $7F, $63, $7F, $63, $63, $67, $E6, $C0 .byte $3F, $33, $3F, $30, $30, $70, $F0, $E0
.byte $99, $5A, $3C, $E7, $E7, $3C, $5A, $99 .byte $7F, $63, $7F, $63, $63, $67, $E6, $C0
.byte $80, $E0, $F8, $FE, $F8, $E0, $80, $00 .byte $99, $5A, $3C, $E7, $E7, $3C, $5A, $99
.byte $02, $0E, $3E, $FE, $3E, $0E, $02, $00 .byte $80, $E0, $F8, $FE, $F8, $E0, $80, $00
.byte $18, $3C, $7E, $18, $18, $7E, $3C, $18 .byte $02, $0E, $3E, $FE, $3E, $0E, $02, $00
.byte $66, $66, $66, $66, $66, $00, $66, $00 .byte $18, $3C, $7E, $18, $18, $7E, $3C, $18
.byte $7F, $DB, $DB, $7B, $1B, $1B, $1B, $00 .byte $66, $66, $66, $66, $66, $00, $66, $00
.byte $3E, $63, $38, $6C, $6C, $38, $CC, $78 .byte $7F, $DB, $DB, $7B, $1B, $1B, $1B, $00
.byte $00, $00, $00, $00, $7E, $7E, $7E, $00 .byte $3E, $63, $38, $6C, $6C, $38, $CC, $78
.byte $18, $3C, $7E, $18, $7E, $3C, $18, $FF .byte $00, $00, $00, $00, $7E, $7E, $7E, $00
.byte $18, $3C, $7E, $18, $18, $18, $18, $00 .byte $18, $3C, $7E, $18, $7E, $3C, $18, $FF
.byte $18, $18, $18, $18, $7E, $3C, $18, $00 .byte $18, $3C, $7E, $18, $18, $18, $18, $00
.byte $00, $18, $0C, $FE, $0C, $18, $00, $00 .byte $18, $18, $18, $18, $7E, $3C, $18, $00
.byte $00, $30, $60, $FE, $60, $30, $00, $00 .byte $00, $18, $0C, $FE, $0C, $18, $00, $00
.byte $00, $00, $C0, $C0, $C0, $FE, $00, $00 .byte $00, $30, $60, $FE, $60, $30, $00, $00
.byte $00, $24, $66, $FF, $66, $24, $00, $00 .byte $00, $00, $C0, $C0, $C0, $FE, $00, $00
.byte $00, $18, $3C, $7E, $FF, $FF, $00, $00 .byte $00, $24, $66, $FF, $66, $24, $00, $00
.byte $00, $FF, $FF, $7E, $3C, $18, $00, $00 .byte $00, $18, $3C, $7E, $FF, $FF, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $FF, $FF, $7E, $3C, $18, $00, $00
.byte $30, $78, $78, $78, $30, $00, $30, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $6C, $6C, $6C, $00, $00, $00, $00, $00 .byte $30, $78, $78, $78, $30, $00, $30, $00
.byte $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00 .byte $6C, $6C, $6C, $00, $00, $00, $00, $00
.byte $30, $7C, $C0, $78, $0C, $F8, $30, $00 .byte $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00
.byte $00, $C6, $CC, $18, $30, $66, $C6, $00 .byte $30, $7C, $C0, $78, $0C, $F8, $30, $00
.byte $38, $6C, $38, $76, $DC, $CC, $76, $00 .byte $00, $C6, $CC, $18, $30, $66, $C6, $00
.byte $60, $60, $C0, $00, $00, $00, $00, $00 .byte $38, $6C, $38, $76, $DC, $CC, $76, $00
.byte $18, $30, $60, $60, $60, $30, $18, $00 .byte $60, $60, $C0, $00, $00, $00, $00, $00
.byte $60, $30, $18, $18, $18, $30, $60, $00 .byte $18, $30, $60, $60, $60, $30, $18, $00
.byte $00, $66, $3C, $FF, $3C, $66, $00, $00 .byte $60, $30, $18, $18, $18, $30, $60, $00
.byte $00, $30, $30, $FC, $30, $30, $00, $00 .byte $00, $66, $3C, $FF, $3C, $66, $00, $00
.byte $00, $00, $00, $00, $00, $30, $30, $60 .byte $00, $30, $30, $FC, $30, $30, $00, $00
.byte $00, $00, $00, $FC, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $30, $30, $60
.byte $00, $00, $00, $00, $00, $30, $30, $00 .byte $00, $00, $00, $FC, $00, $00, $00, $00
.byte $06, $0C, $18, $30, $60, $C0, $80, $00 .byte $00, $00, $00, $00, $00, $30, $30, $00
.byte $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00 .byte $06, $0C, $18, $30, $60, $C0, $80, $00
.byte $30, $70, $30, $30, $30, $30, $FC, $00 .byte $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00
.byte $78, $CC, $0C, $38, $60, $CC, $FC, $00 .byte $30, $70, $30, $30, $30, $30, $FC, $00
.byte $78, $CC, $0C, $38, $0C, $CC, $78, $00 .byte $78, $CC, $0C, $38, $60, $CC, $FC, $00
.byte $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00 .byte $78, $CC, $0C, $38, $0C, $CC, $78, $00
.byte $FC, $C0, $F8, $0C, $0C, $CC, $78, $00 .byte $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00
.byte $38, $60, $C0, $F8, $CC, $CC, $78, $00 .byte $FC, $C0, $F8, $0C, $0C, $CC, $78, $00
.byte $FC, $CC, $0C, $18, $30, $30, $30, $00 .byte $38, $60, $C0, $F8, $CC, $CC, $78, $00
.byte $78, $CC, $CC, $78, $CC, $CC, $78, $00 .byte $FC, $CC, $0C, $18, $30, $30, $30, $00
.byte $78, $CC, $CC, $7C, $0C, $18, $70, $00 .byte $78, $CC, $CC, $78, $CC, $CC, $78, $00
.byte $00, $30, $30, $00, $00, $30, $30, $00 .byte $78, $CC, $CC, $7C, $0C, $18, $70, $00
.byte $00, $30, $30, $00, $00, $30, $30, $60 .byte $00, $30, $30, $00, $00, $30, $30, $00
.byte $18, $30, $60, $C0, $60, $30, $18, $00 .byte $00, $30, $30, $00, $00, $30, $30, $60
.byte $00, $00, $FC, $00, $00, $FC, $00, $00 .byte $18, $30, $60, $C0, $60, $30, $18, $00
.byte $60, $30, $18, $0C, $18, $30, $60, $00 .byte $00, $00, $FC, $00, $00, $FC, $00, $00
.byte $78, $CC, $0C, $18, $30, $00, $30, $00 .byte $60, $30, $18, $0C, $18, $30, $60, $00
.byte $7C, $C6, $DE, $DE, $DE, $C0, $78, $00 .byte $78, $CC, $0C, $18, $30, $00, $30, $00
.byte $30, $78, $CC, $CC, $FC, $CC, $CC, $00 .byte $7C, $C6, $DE, $DE, $DE, $C0, $78, $00
.byte $FC, $66, $66, $7C, $66, $66, $FC, $00 .byte $30, $78, $CC, $CC, $FC, $CC, $CC, $00
.byte $3C, $66, $C0, $C0, $C0, $66, $3C, $00 .byte $FC, $66, $66, $7C, $66, $66, $FC, $00
.byte $F8, $6C, $66, $66, $66, $6C, $F8, $00 .byte $3C, $66, $C0, $C0, $C0, $66, $3C, $00
.byte $7E, $60, $60, $78, $60, $60, $7E, $00 .byte $F8, $6C, $66, $66, $66, $6C, $F8, $00
.byte $7E, $60, $60, $78, $60, $60, $60, $00 .byte $7E, $60, $60, $78, $60, $60, $7E, $00
.byte $3C, $66, $C0, $C0, $CE, $66, $3E, $00 .byte $7E, $60, $60, $78, $60, $60, $60, $00
.byte $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00 .byte $3C, $66, $C0, $C0, $CE, $66, $3E, $00
.byte $78, $30, $30, $30, $30, $30, $78, $00 .byte $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00
.byte $1E, $0C, $0C, $0C, $CC, $CC, $78, $00 .byte $78, $30, $30, $30, $30, $30, $78, $00
.byte $E6, $66, $6C, $78, $6C, $66, $E6, $00 .byte $1E, $0C, $0C, $0C, $CC, $CC, $78, $00
.byte $60, $60, $60, $60, $60, $60, $7E, $00 .byte $E6, $66, $6C, $78, $6C, $66, $E6, $00
.byte $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00 .byte $60, $60, $60, $60, $60, $60, $7E, $00
.byte $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00 .byte $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00
.byte $38, $6C, $C6, $C6, $C6, $6C, $38, $00 .byte $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00
.byte $FC, $66, $66, $7C, $60, $60, $F0, $00 .byte $38, $6C, $C6, $C6, $C6, $6C, $38, $00
.byte $78, $CC, $CC, $CC, $DC, $78, $1C, $00 .byte $FC, $66, $66, $7C, $60, $60, $F0, $00
.byte $FC, $66, $66, $7C, $6C, $66, $E6, $00 .byte $78, $CC, $CC, $CC, $DC, $78, $1C, $00
.byte $78, $CC, $E0, $70, $1C, $CC, $78, $00 .byte $FC, $66, $66, $7C, $6C, $66, $E6, $00
.byte $FC, $30, $30, $30, $30, $30, $30, $00 .byte $78, $CC, $E0, $70, $1C, $CC, $78, $00
.byte $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00 .byte $FC, $30, $30, $30, $30, $30, $30, $00
.byte $CC, $CC, $CC, $CC, $CC, $78, $30, $00 .byte $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00
.byte $C6, $C6, $C6, $D6, $FE, $EE, $C6, $00 .byte $CC, $CC, $CC, $CC, $CC, $78, $30, $00
.byte $C6, $C6, $6C, $38, $38, $6C, $C6, $00 .byte $C6, $C6, $C6, $D6, $FE, $EE, $C6, $00
.byte $CC, $CC, $CC, $78, $30, $30, $78, $00 .byte $C6, $C6, $6C, $38, $38, $6C, $C6, $00
.byte $FE, $06, $0C, $18, $30, $60, $FE, $00 .byte $CC, $CC, $CC, $78, $30, $30, $78, $00
.byte $78, $60, $60, $60, $60, $60, $78, $00 .byte $FE, $06, $0C, $18, $30, $60, $FE, $00
.byte $C0, $60, $30, $18, $0C, $06, $02, $00 .byte $78, $60, $60, $60, $60, $60, $78, $00
.byte $78, $18, $18, $18, $18, $18, $78, $00 .byte $C0, $60, $30, $18, $0C, $06, $02, $00
.byte $10, $38, $6C, $C6, $00, $00, $00, $00 .byte $78, $18, $18, $18, $18, $18, $78, $00
.byte $00, $00, $00, $00, $00, $00, $00, $FF .byte $10, $38, $6C, $C6, $00, $00, $00, $00
.byte $30, $30, $18, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $FF
.byte $00, $00, $78, $0C, $7C, $CC, $76, $00 .byte $30, $30, $18, $00, $00, $00, $00, $00
.byte $E0, $60, $60, $7C, $66, $66, $DC, $00 .byte $00, $00, $78, $0C, $7C, $CC, $76, $00
.byte $00, $00, $78, $CC, $C0, $CC, $78, $00 .byte $E0, $60, $60, $7C, $66, $66, $DC, $00
.byte $1C, $0C, $0C, $7C, $CC, $CC, $76, $00 .byte $00, $00, $78, $CC, $C0, $CC, $78, $00
.byte $00, $00, $78, $CC, $FC, $C0, $78, $00 .byte $1C, $0C, $0C, $7C, $CC, $CC, $76, $00
.byte $38, $6C, $60, $F0, $60, $60, $F0, $00 .byte $00, $00, $78, $CC, $FC, $C0, $78, $00
.byte $00, $00, $76, $CC, $CC, $7C, $0C, $F8 .byte $38, $6C, $60, $F0, $60, $60, $F0, $00
.byte $E0, $60, $6C, $76, $66, $66, $E6, $00 .byte $00, $00, $76, $CC, $CC, $7C, $0C, $F8
.byte $30, $00, $70, $30, $30, $30, $78, $00 .byte $E0, $60, $6C, $76, $66, $66, $E6, $00
.byte $0C, $00, $0C, $0C, $0C, $CC, $CC, $78 .byte $30, $00, $70, $30, $30, $30, $78, $00
.byte $E0, $60, $66, $6C, $78, $6C, $E6, $00 .byte $0C, $00, $0C, $0C, $0C, $CC, $CC, $78
.byte $70, $30, $30, $30, $30, $30, $78, $00 .byte $E0, $60, $66, $6C, $78, $6C, $E6, $00
.byte $00, $00, $CC, $FE, $FE, $D6, $C6, $00 .byte $70, $30, $30, $30, $30, $30, $78, $00
.byte $00, $00, $F8, $CC, $CC, $CC, $CC, $00 .byte $00, $00, $CC, $FE, $FE, $D6, $C6, $00
.byte $00, $00, $78, $CC, $CC, $CC, $78, $00 .byte $00, $00, $F8, $CC, $CC, $CC, $CC, $00
.byte $00, $00, $DC, $66, $66, $7C, $60, $F0 .byte $00, $00, $78, $CC, $CC, $CC, $78, $00
.byte $00, $00, $76, $CC, $CC, $7C, $0C, $1E .byte $00, $00, $DC, $66, $66, $7C, $60, $F0
.byte $00, $00, $DC, $76, $66, $60, $F0, $00 .byte $00, $00, $76, $CC, $CC, $7C, $0C, $1E
.byte $00, $00, $7C, $C0, $78, $0C, $F8, $00 .byte $00, $00, $DC, $76, $66, $60, $F0, $00
.byte $10, $30, $7C, $30, $30, $34, $18, $00 .byte $00, $00, $7C, $C0, $78, $0C, $F8, $00
.byte $00, $00, $CC, $CC, $CC, $CC, $76, $00 .byte $10, $30, $7C, $30, $30, $34, $18, $00
.byte $00, $00, $CC, $CC, $CC, $78, $30, $00 .byte $00, $00, $CC, $CC, $CC, $CC, $76, $00
.byte $00, $00, $C6, $D6, $FE, $FE, $6C, $00 .byte $00, $00, $CC, $CC, $CC, $78, $30, $00
.byte $00, $00, $C6, $6C, $38, $6C, $C6, $00 .byte $00, $00, $C6, $D6, $FE, $FE, $6C, $00
.byte $00, $00, $CC, $CC, $CC, $7C, $0C, $F8 .byte $00, $00, $C6, $6C, $38, $6C, $C6, $00
.byte $00, $00, $FC, $98, $30, $64, $FC, $00 .byte $00, $00, $CC, $CC, $CC, $7C, $0C, $F8
.byte $1C, $30, $30, $E0, $30, $30, $1C, $00 .byte $00, $00, $FC, $98, $30, $64, $FC, $00
.byte $18, $18, $18, $00, $18, $18, $18, $00 .byte $1C, $30, $30, $E0, $30, $30, $1C, $00
.byte $E0, $30, $30, $1C, $30, $30, $E0, $00 .byte $18, $18, $18, $00, $18, $18, $18, $00
.byte $76, $DC, $00, $00, $00, $00, $00, $00 .byte $E0, $30, $30, $1C, $30, $30, $E0, $00
.byte $00, $10, $38, $6C, $C6, $C6, $FE, $00 .byte $76, $DC, $00, $00, $00, $00, $00, $00
.byte $00, $10, $38, $6C, $C6, $C6, $FE, $00

View File

@@ -2,17 +2,15 @@
; void waitvblank (void); ; void waitvblank (void);
; ;
.include "pce.inc" .include "pce.inc"
.export _waitvblank .export _waitvblank
;; .importzp tickcount
.proc _waitvblank .proc _waitvblank
lda tickcount lda tickcount
@lp: cmp tickcount @lp: cmp tickcount
beq @lp beq @lp
rts rts
.endproc .endproc

View File

@@ -9,113 +9,113 @@ static int datavar = 10;
void main(void) void main(void)
{ {
int stackvar = 42; int stackvar = 42;
int i, j; int i, j;
clock_t clk; clock_t clk;
char *p; char* p;
unsigned char xsize, ysize, n; unsigned char xsize, ysize, n;
joy_install(&joy_static_stddrv); joy_install(&joy_static_stddrv);
clrscr(); clrscr();
screensize(&xsize, &ysize); screensize(&xsize, &ysize);
cputs("hello world"); cputs("hello world");
cputsxy(0, 2, "colors:" ); cputsxy(0, 2, "colors:" );
for (i = 0; i < 16; ++i) { for (i = 0; i < 16; ++i) {
textcolor(i); textcolor(i);
cputc('X'); cputc('X');
}
textcolor(1);
gotoxy(0,4);
cprintf("datavar: %02x\n\r", datavar);
cprintf("stackvar: %02x\n\r", stackvar);
j = joy_count();
gotoxy(0,10);
cprintf("Found %d Joysticks.", j);
for (i = 0; i < 4; ++i) {
gotoxy(0, 17 + i);
p = malloc(16);
memcpy(p, "01234567890abcdef", 16);
cprintf("alloced at: %04p - %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", p,
p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15]
);
}
gotoxy(0,ysize - 1);
for (i = 0; i < xsize; ++i) {
cputc('0' + i % 10);
}
gotoxy(0,ysize - 2 - ((256 + xsize) / xsize));
for (i = 0; i < xsize; ++i) {
cputc('0' + i % 10);
}
for (i = 0; i < (xsize * 5); ++i) {
cputc('#');
}
gotoxy(0,ysize - 1 - ((256 + xsize) / xsize));
for (i = 0; i < 256; ++i) {
if ((i != '\n') && (i != '\r')) {
cputc(i);
} }
} textcolor(1);
i = get_tv(); gotoxy(0,4);
gotoxy(30,0); cprintf("datavar: %02x\n\r", datavar);
cputs("TV Mode: "); cprintf("stackvar: %02x\n\r", stackvar);
switch(i) {
case TV_NTSC:
cputs("NTSC");
break;
case TV_PAL:
cputs("PAL");
break;
case TV_OTHER:
cputs("OTHER");
break;
}
cprintf(" %dx%d", xsize, ysize);
for(;;) { j = joy_count();
gotoxy(13,4); gotoxy(0,10);
cprintf("%02x", datavar); cprintf("Found %d Joysticks.", j);
gotoxy(13,5);
cprintf("%02x", stackvar);
++datavar; ++stackvar;
gotoxy(0,8); for (i = 0; i < 4; ++i) {
clk = clock(); gotoxy(0, 17 + i);
cprintf("clock: %08lx", clk); p = malloc(16);
memcpy(p, "01234567890abcdef", 16);
for (i = 0; i < 4; ++i) cprintf("alloced at: %04p - %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", p,
{ p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],
gotoxy(0, 12 + i); p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15]
j = joy_read (i); );
cprintf ("pad %d: %02x %-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s",
i, j,
(j & joy_masks[JOY_UP])? " up " : " ---- ",
(j & joy_masks[JOY_DOWN])? " down " : " ---- ",
(j & joy_masks[JOY_LEFT])? " left " : " ---- ",
(j & joy_masks[JOY_RIGHT])? "right " : " ---- ",
(j & joy_masks[JOY_FIRE])? " fire " : " ---- ",
(j & joy_masks[JOY_FIRE2])? "fire2 " : " ---- ",
(j & joy_masks[JOY_SELECT])? "select" : " ---- ",
(j & joy_masks[JOY_RUN])? " run " : " ---- ");
} }
gotoxy(xsize - 10, 3); gotoxy(0,ysize - 1);
j = (n >> 5) & 1; for (i = 0; i < xsize; ++i) {
revers(j); cputc('0' + i % 10);
cputc(j ? 'R' : ' '); }
cputs(" revers");
revers(0);
waitvblank(); gotoxy(0,ysize - 2 - ((256 + xsize) / xsize));
++n; for (i = 0; i < xsize; ++i) {
} cputc('0' + i % 10);
for(;;); }
for (i = 0; i < (xsize * 5); ++i) {
cputc('#');
}
gotoxy(0,ysize - 1 - ((256 + xsize) / xsize));
for (i = 0; i < 256; ++i) {
if ((i != '\n') && (i != '\r')) {
cputc(i);
}
}
i = get_tv();
gotoxy(30,0);
cputs("TV Mode: ");
switch(i) {
case TV_NTSC:
cputs("NTSC");
break;
case TV_PAL:
cputs("PAL");
break;
case TV_OTHER:
cputs("OTHER");
break;
}
cprintf(" %dx%d", xsize, ysize);
for(;;) {
gotoxy(13,4);
cprintf("%02x", datavar);
gotoxy(13,5);
cprintf("%02x", stackvar);
++datavar; ++stackvar;
gotoxy(0,8);
clk = clock();
cprintf("clock: %08lx", clk);
for (i = 0; i < 4; ++i) {
gotoxy(0, 12 + i);
j = joy_read (i);
cprintf ("pad %d: %02x %-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s",
i, j,
(j & joy_masks[JOY_UP])? " up " : " ---- ",
(j & joy_masks[JOY_DOWN])? " down " : " ---- ",
(j & joy_masks[JOY_LEFT])? " left " : " ---- ",
(j & joy_masks[JOY_RIGHT])? "right " : " ---- ",
(j & joy_masks[JOY_FIRE])? " fire " : " ---- ",
(j & joy_masks[JOY_FIRE2])? "fire2 " : " ---- ",
(j & joy_masks[JOY_SELECT])? "select" : " ---- ",
(j & joy_masks[JOY_RUN])? " run " : " ---- ");
}
gotoxy(xsize - 10, 3);
j = (n >> 5) & 1;
revers(j);
cputc(j ? 'R' : ' ');
cputs(" revers");
revers(0);
waitvblank();
++n;
}
for(;;);
} }