diff --git a/.gitignore b/.gitignore index 9f325b49..5fdfc0df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,27 +1,12 @@ -# Intermediate compilation files +# Compilation related files -c64/basic/combined.s -c64/kernal/combined.s -padding temp.s temp.map +packed_messages.s -src/collect_data -src/compress_text -src/pngprepare -src/preprocess ophis.bin -c64/basic/OUT.BIN -c64/kernal/OUT.BIN - -# Compilation output - -chargen -newbasic -newkern -newc65 -newrom +build/* # Various IDE project files, temporary files, etc. diff --git a/Makefile b/Makefile index 92d15cae..0dacf6a7 100644 --- a/Makefile +++ b/Makefile @@ -1,61 +1,165 @@ -all: Ophis src/collect_data src/preprocess + +# Source files + +SRC_COMMON = $(wildcard c64/aliases/*.s) +SRC_BASIC_COMMON = $(SRC_COMMON) $(wildcard c64/basic/*.s) +SRC_KERNAL_COMMON = $(SRC_COMMON) $(wildcard c64/kernal/*.s) + +SRC_BASIC_GENERIC = $(SRC_BASIC_COMMON) $(wildcard c64/basic/,platform_generic/*.s) +SRC_BASIC_MEGA65 = $(SRC_BASIC_COMMON) $(wildcard c64/basic/,platform_mega65/*.s) +SRC_BASIC_ULTIMATE64 = $(SRC_BASIC_COMMON) $(wildcard c64/basic/,platform_ultimate64/*.s) + +SRC_KERNAL_GENERIC = $(SRC_KERNAL_COMMON) $(wildcard c64/kernal/,platform_generic/*.s) +SRC_KERNAL_MEGA65 = $(SRC_KERNAL_COMMON) $(wildcard c64/kernal/,platform_mega65/*.s) +SRC_KERNAL_ULTIMATE64 = $(SRC_KERNAL_COMMON) $(wildcard c64/kernal/,platform_ultimate64/*.s) + +# Rules - maintainance + +all: build/chargen build/newkern_generic build/newbasic_generic build/newkern_mega65 build/newbasic_mega65 build/newkern_ultimate64 build/newbasic_ultimate64 + +clean: + @rm -rf build + @rm -f temp.s + @rm -f temp.map + @rm -f c64/basic/packed_messages.s + +.PHONY: prep +prep: Ophis build/collect_data build/compress_text build/preprocess build/similarity Ophis: git submodule init git submodule update -src/pngprepare: src/pngprepare.c Makefile - $(CC) $(COPT) -I/usr/local/include -L/usr/local/lib -o src/pngprepare src/pngprepare.c -lpng +# Rules - tools -chargen: src/pngprepare assets/8x8font.png - src/pngprepare charrom assets/8x8font.png chargen +build/pngprepare: src/pngprepare.c Makefile + @mkdir -p build + $(CC) $(COPT) -I/usr/local/include -L/usr/local/lib -o build/pngprepare src/pngprepare.c -lpng -src/collect_data: src/collect_data.c Makefile - gcc -Wall -o src/collect_data src/collect_data.c +build/collect_data: src/collect_data.c Makefile + @mkdir -p build + gcc -Wall -o build/collect_data src/collect_data.c -src/preprocess: src/preprocess.c Makefile - gcc -g -Wall -o src/preprocess src/preprocess.c +build/preprocess: src/preprocess.c Makefile + @mkdir -p build + gcc -g -Wall -o build/preprocess src/preprocess.c -src/similarity: src/similarity.c Makefile - gcc -g -Wall -o src/similarity src/similarity.c +build/similarity: src/similarity.c Makefile + @mkdir -p build + gcc -g -Wall -o build/similarity src/similarity.c -src/compress_text: src/compress_text.c Makefile - gcc -g -Wall -o src/compress_text src/compress_text.c -lm +build/compress_text: src/compress_text.c Makefile + @mkdir -p build + gcc -g -Wall -o build/compress_text src/compress_text.c -lm -newrom: c64/kernal/OUT.BIN c64/basic/OUT.BIN - cat c64/basic/OUT.BIN c64/kernal/OUT.BIN >newrom +# Rules - chargen -newkern: newrom Makefile - dd if=newrom bs=8192 count=1 skip=2 of=newkern +build/chargen: build/pngprepare assets/8x8font.png + build/pngprepare charrom assets/8x8font.png build/chargen -newbasic: newrom Makefile - dd if=newrom bs=8192 count=1 skip=0 of=newbasic +# Rules - platform 'generic' -newc65: newkern newbasic chargen Makefile - dd if=/dev/zero bs=4096 count=10 of=newc65 - cat newbasic chargen chargen newkern >>newc65 - dd if=/dev/zero bs=65536 count=1 of=padding - cat padding >>newc65 +build/basic_generic/OUT.BIN: build/preprocess $(SRC_BASIC_GENERIC) c64/basic/packed_messages.s + @mkdir -p build/basic_generic + @rm -f build/basic_generic/* + @for SRC in $(SRC_BASIC_GENERIC); do \ + ln -s ../../$$SRC build/basic_generic/$$(basename $$SRC); \ + done + build/preprocess -d build/basic_generic -l a000 -h e4d2 +build/kernal_generic/OUT.BIN: build/preprocess $(SRC_KERNAL_GENERIC) + @mkdir -p build/kernal_generic + @rm -f build/kernal_generic/* + @for SRC in $(SRC_KERNAL_GENERIC); do \ + ln -s ../../$$SRC build/kernal_generic/$$(basename $$SRC); \ + done + build/preprocess -d build/kernal_generic -l e4d3 -h ffff -c64/basic/packed_messages.s: Makefile src/compress_text - src/compress_text > c64/basic/packed_messages.s +build/newrom_generic: build/basic_generic/OUT.BIN build/kernal_generic/OUT.BIN + cat build/basic_generic/OUT.BIN build/kernal_generic/OUT.BIN > build/newrom_generic -c64/kernal/OUT.BIN: src/preprocess c64/kernal/*.s - src/preprocess -d c64/kernal -l e4d3 -h ffff +build/newkern_generic: build/newrom_generic Makefile + dd if=build/newrom_generic bs=8192 count=1 skip=2 of=build/newkern_generic -c64/basic/OUT.BIN: src/preprocess c64/basic/*.s c64/basic/packed_messages.s - src/preprocess -d c64/basic -l a000 -h e4d2 +build/newbasic_generic: build/newrom_generic Makefile + dd if=build/newrom_generic bs=8192 count=1 skip=0 of=build/newbasic_generic -testremote: newkern newbasic - x64 -kernal newkern -basic newbasic -remotemonitor +# Rules - platform 'Mega 65' -test: newkern newbasic - x64 -kernal newkern -basic newbasic -8 empty.d64 +build/basic_mega65/OUT.BIN: build/preprocess $(SRC_BASIC_MEGA65) c64/basic/packed_messages.s + @mkdir -p build/basic_mega65 + @rm -f build/basic_mega65/* + @for SRC in $(SRC_BASIC_MEGA65); do \ + ln -s ../../$$SRC build/basic_mega65/$$(basename $$SRC); \ + done + build/preprocess -d build/basic_mega65 -l a000 -h e4d2 -testm65: newc65 - m65 -b ../mega65-core/bin/mega65r1.bit -k ../mega65-core/bin/KICKUP.M65 -R newc65 -4 +build/kernal_mega65/OUT.BIN: build/preprocess $(SRC_KERNAL_MEGA65) + @mkdir -p build/kernal_mega65 + @rm -f build/kernal_mega65/* + @for SRC in $(SRC_KERNAL_MEGA65); do \ + ln -s ../../$$SRC build/kernal_mega65/$$(basename $$SRC); \ + done + build/preprocess -d build/kernal_mega65 -l e4d3 -h ffff -testsimilarity: newkern newbasic src/similarity - src/similarity kernal newrom - src/similarity basic newrom +build/newrom_mega65: build/basic_mega65/OUT.BIN build/kernal_mega65/OUT.BIN + cat build/basic_mega65/OUT.BIN build/kernal_mega65/OUT.BIN > build/newrom_mega65 + +build/newkern_mega65: build/newrom_mega65 Makefile + dd if=build/newrom_mega65 bs=8192 count=1 skip=2 of=build/newkern_mega65 + +build/newbasic_mega65: build/newrom_mega65 Makefile + dd if=build/newrom_mega65 bs=8192 count=1 skip=0 of=build/newbasic_mega65 + +build/newc65: build/newkern_mega65 build/newbasic_mega65 build/chargen Makefile + dd if=/dev/zero bs=4096 count=10 of=build/newc65 + cat build/newbasic_mega65 build/chargen build/chargen build/newkern_mega65 >>build/newc65 + dd if=/dev/zero bs=65536 count=1 of=build/padding + cat build/padding >>build/newc65 + +# Rules - platform 'Ultimate 64' + +build/basic_ultimate64/OUT.BIN: build/preprocess $(SRC_BASIC_ULTIMATE64) c64/basic/packed_messages.s + @mkdir -p build/basic_ultimate64 + @rm -f build/basic_ultimate64/* + @for SRC in $(SRC_BASIC_ULTIMATE64); do \ + ln -s ../../$$SRC build/basic_ultimate64/$$(basename $$SRC); \ + done + build/preprocess -d build/basic_ultimate64 -l a000 -h e4d2 + +build/kernal_ultimate64/OUT.BIN: build/preprocess $(SRC_KERNAL_ULTIMATE64) + @mkdir -p build/kernal_ultimate64 + @rm -f build/kernal_ultimate64/* + @for SRC in $(SRC_KERNAL_ULTIMATE64); do \ + ln -s ../../$$SRC build/kernal_ultimate64/$$(basename $$SRC); \ + done + build/preprocess -d build/kernal_ultimate64 -l e4d3 -h ffff + +build/newrom_ultimate64: build/basic_ultimate64/OUT.BIN build/kernal_ultimate64/OUT.BIN + cat build/basic_ultimate64/OUT.BIN build/kernal_ultimate64/OUT.BIN > build/newrom_ultimate64 + +build/newkern_ultimate64: build/newrom_ultimate64 Makefile + dd if=build/newrom_ultimate64 bs=8192 count=1 skip=2 of=build/newkern_ultimate64 + +build/newbasic_ultimate64: build/newrom_ultimate64 Makefile + dd if=build/newrom_ultimate64 bs=8192 count=1 skip=0 of=build/newbasic_ultimate64 + +# Rules - misc + +c64/basic/packed_messages.s: Makefile build/compress_text + build/compress_text > c64/basic/packed_messages.s + +# Rules - tests + +testremote: build/newkern_generic build/newbasic_generic + x64 -kernal build/newkern-generic -basic build/newbasic-generic -remotemonitor + +test: build/newkern_generic build/newbasic_generic + x64 -kernal build/newkern_generic -basic build/newbasic_generic -8 empty.d64 + +testm65: build/newc65 + m65 -b ../mega65-core/bin/mega65r1.bit -k ../mega65-core/bin/KICKUP.M65 -R build/newc65 -4 + +testsimilarity: build/newrom_generic src/similarity + build/similarity kernal build/newrom_generic + build/similarity basic build/newrom_generic diff --git a/c64/aliases/.dummy b/c64/aliases/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/c64/basic/,platform_generic/.dummy b/c64/basic/,platform_generic/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/c64/basic/,platform_mega65/.dummy b/c64/basic/,platform_mega65/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/c64/basic/,platform_ultimate64/,aliases-ultimate64.s b/c64/basic/,platform_ultimate64/,aliases-ultimate64.s new file mode 100644 index 00000000..1f30e332 --- /dev/null +++ b/c64/basic/,platform_ultimate64/,aliases-ultimate64.s @@ -0,0 +1,10 @@ + +;; Registers according to Ultimate 64 Command Interface ddescription, +;; https://1541u-documentation.readthedocs.io/en/latest/command%20interface.html + + .alias U64_CONTROL $DF1C ; write + .alias U64_STATUS $DF1C ; read + .alias U64_COMMAND_DATA $DF1D ; write + .alias U64_IDENTIFICATION $DF1D ; read + .alias U64_RESPONSE_DATA $DF1E ; read only + .alias U64_STATUS_DATA $DF1F ; read only diff --git a/c64/basic/packed_messages.s b/c64/basic/packed_messages.s deleted file mode 100644 index 2747aeda..00000000 --- a/c64/basic/packed_messages.s +++ /dev/null @@ -1,126 +0,0 @@ -packed_message_chars: - .byte $45 ; 'E' = $1 (nybl) - .byte $54 ; 'T' = $2 (nybl) - .byte $4F ; 'O' = $3 (nybl) - .byte $4E ; 'N' = $4 (nybl) - .byte $49 ; 'I' = $5 (nybl) - .byte $52 ; 'R' = $6 (nybl) - .byte $41 ; 'A' = $7 (nybl) - .byte $4C ; 'L' = $8 (nybl) - .byte $53 ; 'S' = $9 (nybl) - .byte $44 ; 'D' = $a (nybl) - .byte $46 ; 'F' = $b (nybl) - .byte $55 ; 'U' = $c (nybl) - .byte $50 ; 'P' = $d (nybl) - .byte $4D ; 'M' = $e (nybl) - .byte $43 ; 'C' = $F1 / $xF $43 - .byte $47 ; 'G' = $F2 / $xF $47 - .byte $59 ; 'Y' = $F3 / $xF $59 - .byte $56 ; 'V' = $F4 / $xF $56 - .byte $42 ; 'B' = $F5 / $xF $42 - .byte $48 ; 'H' = $F6 / $xF $48 - .byte $58 ; 'X' = $F7 / $xF $58 - .byte $57 ; 'W' = $F8 / $xF $57 - .byte $24 ; '$' = $F9 / $xF $24 - .byte $27 ; ''' = $Fa / $xF $27 - .byte $0D ; ' ' = $Fb / $xF $0D - .byte $51 ; 'Q' = $Fc / $xF $51 - .byte $2E ; '.' = $Fd / $xF $2E - .byte $23 ; '#' = $FE/F + $23 - .byte $4B ; 'K' = $FE/F + $4B - .byte $28 ; '(' = $FE/F + $28 - .byte $5A ; 'Z' = $FE/F + $5A - .byte $2B ; '+' = $FE/F + $2B - .byte $2D ; '-' = $FE/F + $2D - .byte $2A ; '*' = $FE/F + $2A - .byte $2F ; '/' = $FE/F + $2F - .byte $5E ; '^' = $FE/F + $5E - .byte $3E ; '>' = $FE/F + $3E - .byte $3D ; '=' = $FE/F + $3D - .byte $3C ; '<' = $FE/F + $3C -packed_message_tokens: - .byte $00,$01,$02,$ff,$03,$04,$ff,$03 - .byte $05,$04,$ff,$03,$05,$06,$ff,$07 - .byte $05,$08,$ff,$05,$09,$03,$ff,$05 - .byte $0a,$03,$ff,$0b,$0c,$ff,$0d,$07 - .byte $0e,$ff,$0f,$10,$11,$ff,$12,$ff - .byte $13,$10,$14,$ff,$15,$16,$17,$ff - .byte $0d,$18,$ff,$19,$ff,$15,$16,$1a - .byte $ff,$1b,$1c,$ff,$1d,$1e,$ff,$1f - .byte $20,$ff,$21,$22,$23,$ff,$0d,$24 - .byte $ff,$25,$26,$ff,$27,$00,$28,$ff - .byte $03,$17,$ff,$29,$00,$2a,$ff,$2b - .byte $2c,$ff,$1b,$2d,$ff,$2e,$ff,$2f - .byte $ff,$30,$ff,$31,$ff,$32,$ff,$33 - .byte $ff,$34,$ff,$35,$36,$ff,$1a,$37 - .byte $ff - .byte $05 - .byte $38 - .byte $ff -packed_message_words: - .byte $23,$30,$e7,$4f,$59,$00,$b5,$81 - .byte $90,$b5,$81,$00,$3d,$14,$00,$43 - .byte $20,$b3,$c4,$a0,$a1,$f4,$5f,$43 - .byte $10,$d6,$19,$14,$20,$54,$dc,$20 - .byte $3c,$2d,$c2,$00,$e5,$99,$54,$f2 - .byte $00,$b5,$81,$47,$e1,$00,$58,$81 - .byte $f2,$78,$00,$4c,$ef,$42,$16,$00 - .byte $41,$f7,$20,$f8,$52,$f6,$3c,$20 - .byte $b3,$60,$9f,$59,$42,$7f,$58,$00 - .byte $61,$2c,$64,$00,$f2,$39,$cf,$42 - .byte $00,$3c,$20,$3b,$00,$a7,$27,$00 - .byte $fc,$c7,$42,$52,$f3,$00,$3f,$56 - .byte $16,$b8,$3f,$57,$00,$e1,$e3,$6f - .byte $59,$00,$c4,$a1,$bf,$27,$a0,$92 - .byte $72,$1e,$14,$20,$f5,$7a,$00,$9c - .byte $f5,$9f,$43,$65,$d2,$00,$61,$a5 - .byte $ef,$27,$a0,$76,$67,$f3,$00,$a5 - .byte $f4,$59,$53,$40,$f5,$f3,$00,$ff - .byte $5a,$16,$30,$a5,$61,$f1,$20,$2f - .byte $59,$d1,$00,$e5,$9e,$72,$f1,$f6 - .byte $00,$92,$65,$4f,$47,$00,$83,$4f - .byte $47,$00,$b3,$6e,$c8,$70,$f1,$3e - .byte $d8,$1f,$58,$00,$f1,$74,$fa,$20 - .byte $f1,$34,$25,$4c,$10,$bc,$4f,$43 - .byte $25,$34,$00,$f4,$16,$5b,$f3,$00 - .byte $83,$7a,$00,$61,$7a,$f3,$fd,$fb - .byte $00,$83,$7a,$54,$f2,$00,$f4,$16 - .byte $5b,$f3,$54,$f2,$00,$97,$f4,$54 - .byte $f2,$00,$16,$63,$60,$f5,$f3,$21 - .byte $90,$b6,$11,$fd,$fb,$fb,$00,$f1 - .byte $36,$6c,$d2,$00,$5e,$d8,$1e,$14 - .byte $21 - .byte $a0 -packed_keywords: - .byte $14,$a0,$b3,$60,$41,$f7,$20,$a7 - .byte $27,$00,$54,$dc,$2f,$23,$00,$54 - .byte $dc,$20,$a5,$e0,$61,$7a,$00,$81 - .byte $20,$f2,$32,$30,$6c,$40,$5b,$00 - .byte $61,$92,$36,$10,$f2,$39,$cf,$42 - .byte $00,$61,$2c,$64,$00,$61,$e0,$92 - .byte $3d,$00,$34,$00,$f8,$75,$20,$83 - .byte $7a,$00,$97,$f4,$10,$f4,$16,$5b - .byte $f3,$00,$a1,$b0,$d3,$ff,$4b,$10 - .byte $d6,$54,$2f,$23,$00,$d6,$54,$20 - .byte $f1,$34,$20,$85,$92,$00,$f1,$86 - .byte $00,$f1,$ea,$00,$9f,$59,$90,$3d - .byte $14,$00,$f1,$83,$91,$00,$f2,$12 - .byte $00,$41,$f8,$00,$27,$f5,$fe,$28 - .byte $23,$00,$b4,$00,$9d,$f1,$fe,$28 - .byte $2f,$48,$14,$00,$43,$20,$92,$1d - .byte $00,$fe,$2b,$fe,$2d,$fe,$2a,$fe - .byte $2f,$fe,$5e,$74,$a0,$36,$00,$fe - .byte $3e,$fe,$3d,$fe,$3c,$9f,$47,$40 - .byte $54,$20,$7f,$42,$90,$c9,$60,$b6 - .byte $10,$d3,$90,$9f,$51,$60,$64,$a0 - .byte $83,$f2,$00,$1f,$58,$d0,$f1,$39 - .byte $00,$95,$40,$27,$40,$72,$40,$d1 - .byte $1f,$4b,$00,$81,$40,$92,$6f,$24 - .byte $00,$f4,$78,$00,$79,$f1,$00,$f1 - .byte $f6,$6f,$24,$00,$81,$b2,$f9,$00 - .byte $65,$f2,$f6,$2f,$24,$00,$e5,$af - .byte $24 - .byte $00 - .byte $f2 - .byte $30 - .alias packed_keyword_table_len $DC diff --git a/c64/kernal/,platform_generic/.dummy b/c64/kernal/,platform_generic/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/c64/kernal/,platform_mega65/.dummy b/c64/kernal/,platform_mega65/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/c64/kernal/,platform_ultimate64/,aliases-ultimate64.s b/c64/kernal/,platform_ultimate64/,aliases-ultimate64.s new file mode 100644 index 00000000..1f30e332 --- /dev/null +++ b/c64/kernal/,platform_ultimate64/,aliases-ultimate64.s @@ -0,0 +1,10 @@ + +;; Registers according to Ultimate 64 Command Interface ddescription, +;; https://1541u-documentation.readthedocs.io/en/latest/command%20interface.html + + .alias U64_CONTROL $DF1C ; write + .alias U64_STATUS $DF1C ; read + .alias U64_COMMAND_DATA $DF1D ; write + .alias U64_IDENTIFICATION $DF1D ; read + .alias U64_RESPONSE_DATA $DF1E ; read only + .alias U64_STATUS_DATA $DF1F ; read only