Skip to content

Commit 275781d

Browse files
authored
Merge pull request #14 from skeetor/develop
Spreddi ported to C64
2 parents 0c9ce42 + 52a4aa1 commit 275781d

39 files changed

+137
-55
lines changed

C128/KeyScan/KeyScan.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ C64ModeTxt: .byte " C128/C64",0
489489
SystemMode: .byte C128_MODE
490490
ZPSafe: .res $10,0
491491

492-
Line00: .byte "CRSD F5 F3 F1 F7CRSL CR DEL",0
492+
Line00: .byte "CRSD F5 F3 F1 F7CRSR CR DEL",0
493493
.byte " 0 0 0 0 0 0 0 0",0
494494
Line01: .byte " SHL E S Z 4 A W 3",0
495495
.byte " 0 0 0 0 0 0 0 0",0

C128/spreddi/build.cmd

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,23 @@ if not exist "obj" mkdir obj
44
if not exist "bin" mkdir bin
55

66
set SYSTEM_CONFIG="c128-asm.cfg"
7-
set SYSTEM_DEFINE=C128
7+
set SYSTEM_DEFINE=c128
88

9-
set C1541_PATH=e:\Programme\VICE-Win-3.1-x64\
10-
set PROJECT_NAME=spreddi
11-
set DISK_NAME=%PROJECT_NAME%
12-
13-
del /F /Q obj\*.*
14-
15-
echo System: %SYSTEM_DEFINE%
9+
@echo on
10+
echo Building %PROJECT_NAME%.s C128
11+
ca65 -I ..\..\include -W1 -g -l obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.lst -mm near -t c64 -D C128 -o obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.o %PROJECT_NAME%.s
12+
echo Done. Running linker
1613
echo=
17-
echo Building %PROJECT_NAME%.s
18-
ca65 -I ..\..\include -I ..\..\include\c128 -W1 -g -l obj\%PROJECT_NAME%.lst -mm near -t c64 -D %SYSTEM_DEFINE% -o obj\%PROJECT_NAME%.o %PROJECT_NAME%.s
19-
rem echo Building scankeys.s
20-
rem ca65 -I ..\..\include -W1 -g -l obj\scankeys.lst -mm near -t c64 -D %SYSTEM_DEFINE% -o obj\scankeys.o scankeys.s
14+
ld65 -C %SYSTEM_CONFIG% -Ln obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.vice -vm -m obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.map --dbgfile obj\%PROJECT_NAME%-c128.dbg -o bin\%PROJECT_NAME%-%SYSTEM_DEFINE%.prg obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.o
2115

16+
set SYSTEM_CONFIG="c64-asm.cfg"
17+
set SYSTEM_DEFINE=c64
18+
19+
echo Building %PROJECT_NAME%.s C64
20+
ca65 -I ..\..\include -W1 -g -l obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.lst -mm near -t c64 -D C64 -o obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.o %PROJECT_NAME%.s
2221
echo Done. Running linker
2322
echo=
24-
rem ld65 -C %SYSTEM_CONFIG% -Ln obj\%PROJECT_NAME%.vice -vm -m obj\%PROJECT_NAME%.map --dbgfile obj\%PROJECT_NAME%.dbg -o bin\%PROJECT_NAME%.prg obj\%PROJECT_NAME%.o obj\scankeys.o
25-
ld65 -C %SYSTEM_CONFIG% -Ln obj\%PROJECT_NAME%.vice -vm -m obj\%PROJECT_NAME%.map --dbgfile obj\%PROJECT_NAME%.dbg -o bin\%PROJECT_NAME%.prg obj\%PROJECT_NAME%.o
23+
ld65 -C %SYSTEM_CONFIG% -Ln obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.vice -vm -m obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.map --dbgfile obj\%PROJECT_NAME%-c128.dbg -o bin\%PROJECT_NAME%-%SYSTEM_DEFINE%.prg obj\%PROJECT_NAME%-%SYSTEM_DEFINE%.o
24+
2625
copy /Y obj\*.vice bin 2>NUL: >NUL:
27-
%C1541_PATH%c1541.exe -format "develop,00" d64 bin\%DISK_NAME%.d64 -write "bin\%PROJECT_NAME%.prg" "%PROJECT_NAME%" -write "bin\spritedata.seq" "spritedata,s"
26+
%C1541_PATH%c1541.exe -format "develop,00" d64 bin\%DISK_NAME%.d64 -write "bin\%PROJECT_NAME%-c64.prg" "%PROJECT_NAME%-c64" -write "bin\%PROJECT_NAME%-c128.prg" "%PROJECT_NAME%-c128" -write "bin\spritedata.seq" "spritedata,s"

C128/spreddi/spreddi.s

Lines changed: 105 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@
66
.include "screenmap.inc"
77

88
.include "c128_system.inc"
9-
.include "c128_system.inc"
9+
1010
.include "tools/misc.inc"
1111
.include "tools/intrinsics.inc"
1212

1313
; Debug defines
1414
;SHOW_DEBUG_SPRITE = 1
15-
;KEYBOARD_DEBUG_PRINT = 1
15+
KEYBOARD_DEBUG_PRINT = 1
16+
17+
.ifdef C64
18+
CMDR_SHIFT_LOCK = $291
19+
.else
20+
CMDR_SHIFT_LOCK = LOCKS
21+
.endif
1622

1723
; Zeropage variables
1824
CONSOLE_PTR = SCREEN_PTR ; $e0
@@ -243,7 +249,7 @@ basicstub:
243249

244250
MAIN_APPLICATION_LEN = (MAIN_APPLICATION_END-MAIN_APPLICATION)
245251

246-
; Switch to default C128 config
252+
; Switch to default C128 config. Doesn't hurt on C64
247253
lda #$00
248254
sta MainExitFlag
249255
sta MMU_CR_IO
@@ -253,10 +259,10 @@ basicstub:
253259
sei
254260

255261
; Save lock state and disable it
256-
lda LOCKS
262+
lda CMDR_SHIFT_LOCK
257263
sta LockFlag
258264
lda #$ff
259-
sta LOCKS
265+
sta CMDR_SHIFT_LOCK
260266

261267
; Save Zeropage
262268
ldy #ZP_BASE_LEN
@@ -324,6 +330,7 @@ basicstub:
324330
lda #SPRITE_BUFFER_LEN
325331
sta Multiplier
326332

333+
jsr DetectSystem
327334
jsr CopyKeytables
328335

329336
; Reset all sprite expansions
@@ -372,7 +379,7 @@ basicstub:
372379
bpl @ZPRestore
373380

374381
lda LockFlag
375-
sta LOCKS
382+
sta CMDR_SHIFT_LOCK
376383

377384
cli
378385

@@ -437,6 +444,53 @@ basicstub:
437444
rts
438445
.endproc
439446

447+
.proc DetectSystem
448+
lda #0
449+
sta SystemMode
450+
451+
ldy #3
452+
@C64Check:
453+
lda $eb81,y
454+
cmp C64Id,y
455+
bne @IsC128
456+
dey
457+
bpl @C64Check
458+
459+
; It's a C64, now check if it is a real one
460+
lda SystemMode
461+
ora #C64_MODE
462+
sta SystemMode
463+
464+
; TODO: Will this also work on M65?
465+
lda #$00
466+
sta VIC_KBD_128
467+
lda VIC_KBD_128
468+
ldy #C64_MODE
469+
cmp #$ff
470+
beq @Done
471+
472+
lda SystemMode
473+
ora #C128_MODE
474+
sta SystemMode
475+
jmp @Done
476+
477+
@IsC128:
478+
ldy #3
479+
@C128Check:
480+
lda $eb81,y
481+
cmp C64Id,y
482+
bne @Done
483+
dey
484+
bpl @C128Check
485+
486+
lda SystemMode
487+
ora #C128_MODE
488+
sta SystemMode
489+
490+
@Done:
491+
rts
492+
.endproc
493+
440494
.proc FarCaller
441495
jmp (FARCALL_PTR)
442496
.endproc
@@ -531,66 +585,70 @@ MAIN_APPLICATION = *
531585
; so we can easily access it.
532586
.proc CopyKeytables
533587

534-
; Standard keytable without modifiers
535-
SetPointer $fa80, MEMCPY_SRC
588+
lda SystemMode
589+
and #C64_MODE
590+
beq @C128_KT
591+
592+
SetPointer KT_64_NORMAL, KeytableNormal
593+
SetPointer KT_64_SHIFT, KeytableShift
594+
SetPointer KT_64_COMMODORE, KeytableCommodore
595+
SetPointer KT_64_CONTROL, KeytableControl
596+
SetPointer KT_64_ALT, KeytableAlt
597+
598+
jmp @CopyTables
599+
600+
@C128_KT:
601+
SetPointer KT_128_NORMAL, KeytableNormal
602+
SetPointer KT_128_SHIFT, KeytableShift
603+
SetPointer KT_128_COMMODORE, KeytableCommodore
604+
SetPointer KT_128_CONTROL, KeytableControl
605+
SetPointer KT_128_ALT, KeytableAlt
606+
607+
@CopyTables:
608+
CopyPointer KeytableNormal, MEMCPY_SRC
536609
SetPointer SymKeytableNormal, MEMCPY_TGT
537610

538611
ldy #KeyTableLen
539612
jsr memcpy255
540-
lda MEMCPY_TGT
541-
sta KeytableNormal
542-
lda MEMCPY_TGT HI
543-
sta KeytableNormal HI
613+
CopyPointer MEMCPY_TGT, KeytableNormal
544614

545615
; Shifted keys
546-
SetPointer $fad9, MEMCPY_SRC
616+
CopyPointer KeytableShift, MEMCPY_SRC
547617
SetPointer SymKeytableShift, MEMCPY_TGT
548618

549619
ldy #KeyTableLen
550620
jsr memcpy255
551-
lda MEMCPY_TGT
552-
sta KeytableShift
553-
lda MEMCPY_TGT HI
554-
sta KeytableShift HI
621+
CopyPointer MEMCPY_TGT, KeytableShift
555622

556623
; Commodore keys
557-
SetPointer $fb32, MEMCPY_SRC
624+
CopyPointer KeytableCommodore, MEMCPY_SRC
558625
SetPointer SymKeytableCommodore, MEMCPY_TGT
559626

560627
ldy #KeyTableLen
561628
jsr memcpy255
562-
lda MEMCPY_TGT
563-
sta KeytableCommodore
564-
lda MEMCPY_TGT HI
565-
sta KeytableCommodore HI
629+
CopyPointer MEMCPY_TGT, KeytableCommodore
566630

567631
; CTRL keys
568-
SetPointer $fb8b, MEMCPY_SRC
632+
CopyPointer KeytableControl, MEMCPY_SRC
569633
SetPointer SymKeytableControl, MEMCPY_TGT
570634

571635
ldy #KeyTableLen
572636
jsr memcpy255
573-
lda MEMCPY_TGT
574-
sta KeytableControl
575-
lda MEMCPY_TGT HI
576-
sta KeytableControl HI
577-
578-
; Unused keycode in the kernel
579-
; but we want it, so we patch it
580-
lda #$a0
581-
ldy #$00 ; DEL
582-
sta SymKeytableControl,y
637+
CopyPointer MEMCPY_TGT, KeytableControl
583638

584639
; ALT keys
585-
SetPointer $fbe4, MEMCPY_SRC
640+
CopyPointer KeytableAlt, MEMCPY_SRC
586641
SetPointer SymKeytableAlt, MEMCPY_TGT
587642

588643
ldy #KeyTableLen
589644
jsr memcpy255
590-
lda MEMCPY_TGT
591-
sta KeytableAlt
592-
lda MEMCPY_TGT HI
593-
sta KeytableAlt HI
645+
CopyPointer MEMCPY_TGT, KeytableAlt
646+
647+
; Unused keycode in the kernel
648+
; but we want it, so we patch it
649+
lda #$a0
650+
ldy #$00 ; DEL
651+
sta SymKeytableControl,y
594652

595653
rts
596654
.endproc
@@ -4709,6 +4767,10 @@ SCANKEYS_BLOCK_IRQ = 1
47094767
; 1 2 3 4
47104768
; 0123456789012345678901234567890123456789
47114769
VersionTxt: .byte "SPREDDI V1.00 BY GERHARD GRUBER 2021",0
4770+
C64Id: .byte $14, $0d, $1d, $88
4771+
4772+
C128Id: .word $fa80
4773+
.byte $14, $0d, $1d, $88
47124774

47134775
; Saving/Loading
47144776
FilenameDefaultTxt: .byte "spritedata" ; Filename is in PETSCII
@@ -4862,13 +4924,17 @@ SpriteEditorKeyMap:
48624924
DefineKey KEY_SHIFT, $93, NO_REPEAT_KEY, ClearGridHome ; CLEAR
48634925
DefineKey KEY_SHIFT|KEY_CTRL, $94, REPEAT_KEY, InsertColumns ; CTRL-INS
48644926
DefineKey KEY_SHIFT|KEY_COMMODORE, $94, REPEAT_KEY, InsertLine ; CMDR-INS
4927+
DefineKey KEY_SHIFT|KEY_COMMODORE, $91, REPEAT_KEY, ShiftGridUp ; SHIFT CMDR CRSR Up
4928+
DefineKey KEY_SHIFT|KEY_COMMODORE, $9d, REPEAT_KEY, ShiftGridLeft ; SHIFT CMDR CRSR Left
48654929

48664930
; COMMODORE keys
48674931
DefineKey KEY_COMMODORE, $aa, NO_REPEAT_KEY, AppendFrameCopy ; CMDR-N
48684932
DefineKey KEY_COMMODORE, $b3, REPEAT_KEY, ShiftGridUp ; CMDR-W
48694933
DefineKey KEY_COMMODORE, $ae, REPEAT_KEY, ShiftGridDown ; CMDR-S
48704934
DefineKey KEY_COMMODORE, $b0, REPEAT_KEY, ShiftGridLeft ; CMDR-A
48714935
DefineKey KEY_COMMODORE, $ac, REPEAT_KEY, ShiftGridRight ; CMDR-D
4936+
DefineKey KEY_COMMODORE, $91, REPEAT_KEY, ShiftGridDown ; CMDR CRSR-Down
4937+
DefineKey KEY_COMMODORE, $9d, REPEAT_KEY, ShiftGridRight ; CMDR CRSR-Right
48724938
DefineKey KEY_COMMODORE, $94, REPEAT_KEY, DeleteLine ; CMDR-DEL
48734939

48744940
; CONTROL keys
@@ -4903,6 +4969,7 @@ BSS_START = *
49034969
; Functionpointer to the current keyboardhandler
49044970
EditorKeyHandler: .word 0
49054971
WelcomeDone: .word 0
4972+
SystemMode:.byte 0 ; C64/C128/M65
49064973

49074974
TMP_VAL_0: .word 0
49084975
TMP_VAL_1: .word 0

include/c128/c128_system.inc renamed to include/c128_system.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ READST = $ffb7
115115
; To be added to cc65
116116
LOCKS = $f7
117117
STKEY = $91 ; Flag for STOP key. If pressed $ff otherwise $7f
118-
INP_NDX = $d0 ; Nuber of characters in keyboard buffer
118+
INP_NDX = $d0 ; Number of characters in keyboard buffer
119119
VIC_COLOR_RAM = $d800
120120

121121
; MMU_CR = Configuration register
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)