diff --git a/samples_cbm/Makefile.vars b/samples_cbm/Makefile.vars new file mode 100644 index 0000000..1aa9d66 --- /dev/null +++ b/samples_cbm/Makefile.vars @@ -0,0 +1,7 @@ +# Common emulator flags and locations +# Ensure the emulator and rom locations are for your system + +ALOEVERA = "../../target/debug/aloevera" +C128_EMU = x128 +C128_EMU_FLAGS = +#DEBUG = -debug 9000 diff --git a/samples_cbm/common/Makefile b/samples_cbm/common/Makefile new file mode 100644 index 0000000..92fedac --- /dev/null +++ b/samples_cbm/common/Makefile @@ -0,0 +1,36 @@ +# Common makefile include for examples +# Don't run make from this directory, run +# from subdirs + +C128_RUN = $(C128_EMU) $(C128_EMU_FLAGS) $(DEBUG) + +# Ensure ld65 and ca65 are on your path +# Assembly flags +CPU = 6502 +AS = ca65 +# Add defines, if needed (-DWHATEVER) +ASFLAGS = -g --cpu $(CPU) + +# Linker flags +LD = ld65 +#Define segments and files in config.cfg +LDFLAGS = -C ../common/c128-asm.cfg + +OBJS_$(NAME): $(NAME).o + $(LD) $(LDFLAGS) -o $(NAME).prg -m $(NAME).map $(NAME).o + +$(NAME).o: project.av $(NAME).s + $(AS) $(ASFLAGS) $(NAME).s + +run_fresh: + $(C128_RUN) + +run_asm: OBJS_$(NAME) + $(C128_RUN) -autostart $(NAME).prg + +run_bas: $(NAME).assembled.bas + $(C128_RUN) -bas $(NAME).assembled.bas + +all: OBJS_$(NAME) +clean: + rm -rf ./output *.o *.prg *.map *.av *.log *.assembled.bas *.img *.BIN *.meta diff --git a/samples_cbm/common/c128-asm.cfg b/samples_cbm/common/c128-asm.cfg new file mode 100644 index 0000000..30ec9e6 --- /dev/null +++ b/samples_cbm/common/c128-asm.cfg @@ -0,0 +1,17 @@ +FEATURES { + STARTADDRESS: default = $1C00; +} +MEMORY { + ZP: file = "", start = $0002, size = $00FE, define = yes; + LOADADDR: file = %O, start = %S - 2, size = $0002; + MAIN: file = %O, start = %S, size = $D000 - %S; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, optional = yes; + LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = rw; + RODATA: load = MAIN, type = ro, optional = yes; + DATA: load = MAIN, type = rw, optional = yes; + BSS: load = MAIN, type = bss, optional = yes, define = yes; +} \ No newline at end of file diff --git a/samples_cbm/common/header.inc b/samples_cbm/common/header.inc new file mode 100644 index 0000000..ad9523c --- /dev/null +++ b/samples_cbm/common/header.inc @@ -0,0 +1,9 @@ +;Basic Header +.segment "LOADADDR" + .word $1C01 + +.segment "EXEHDR" +.word next, 10 +.byte $9e, "7188", 0, 0 +.word 0, 0, 0 +next: .word 0 \ No newline at end of file diff --git a/samples_cbm/common/macros.inc b/samples_cbm/common/macros.inc new file mode 100644 index 0000000..2c05075 --- /dev/null +++ b/samples_cbm/common/macros.inc @@ -0,0 +1,45 @@ +; adds a constant to 16 bit value +; stored at addr +.macro add_constant_16 addr, constant + clc + lda addr + adc #constant + sta addr + 1 +.endmacro + +; loop until value stored in addr equals constant +.macro loop_till_eq_16 addr, constant, loop_label + lda addr+1 + cmp #>constant ;loop until 512 reached + bne loop_label + lda addr + cmp #constant + sta addr+1 +.endmacro + +VERA_ADDR_LO = $9F20 +VERA_ADDR_MID = VERA_ADDR_LO + 1; +VERA_ADDR_HI = VERA_ADDR_LO + 2; +VERA_DATA0 = VERA_ADDR_LO + 3; +VERA_DATA1 = VERA_ADDR_LO + 4; + +.macro v_address_set addr, stride + lda #<(addr >> 16) | stride << 4 + sta VERA_ADDR_HI + lda #<(addr >> 8) + sta VERA_ADDR_MID + lda #<(addr) + sta VERA_ADDR_LO +.endmacro + diff --git a/samples_cbm/petscii_tile/Makefile b/samples_cbm/petscii_tile/Makefile new file mode 100644 index 0000000..9e2d0ba --- /dev/null +++ b/samples_cbm/petscii_tile/Makefile @@ -0,0 +1,19 @@ +include ../Makefile.vars +NAME = p128 + +project.av: p128-ref-template.png + $(ALOEVERA) create project project.av + $(ALOEVERA) -p project.av palette import cbm_palette p128-ref-template.png +# $(ALOEVERA) -p project.gx16 imageset import text_set_1 8 8 pixel-font.png +# $(ALOEVERA) -p project.gx16 imageset format text_set_1 palette_1 1 +# $(ALOEVERA) -p project.gx16 asm ./output/ all + $(ALOEVERA) -p project.av asm -f ca65 ./output/ all + +generate_resources: project.av + +generate_basic: generate_resources + cat $(NAME).bas > $(NAME).assembled.bas + +$(NAME).assembled.bas: generate_basic + +include ../common/Makefile diff --git a/samples_cbm/petscii_tile/p128-ref-template.png b/samples_cbm/petscii_tile/p128-ref-template.png new file mode 100644 index 0000000..3e4707e Binary files /dev/null and b/samples_cbm/petscii_tile/p128-ref-template.png differ diff --git a/samples_cbm/petscii_tile/p128.s b/samples_cbm/petscii_tile/p128.s new file mode 100644 index 0000000..231fe49 --- /dev/null +++ b/samples_cbm/petscii_tile/p128.s @@ -0,0 +1,11 @@ +.include "../common/header.inc" + +.code +lda #$00 +sta $d020 +sta $d021 +rts + +.segment "RODATA" +imageset: + .include "output/palettes/cbm_palette.ca65.inc"