| |
Jammer
Registered: Nov 2002 Posts: 1336 |
C64/C128 combo program compilation
Question might turn out plainly stupid so bear with me but I'm total noob on C128.
Can C64 program be compiled to run both on C64 and C128 in its native 128k mode if it has appropriate branches in code? Or it's always two separate tailored builds?
I've already learnt that C128 program startup is either $1C01 or $4001 but if C128 startup was embedded at the right spot, would it still launch? |
|
... 35 posts hidden. Click here to view all posts.... |
| |
aeeben
Registered: May 2002 Posts: 44 |
@Jammer, if this is for the project I think it is, why not do a native version for C-128 in the VDC 80 column display, then you can run all calculations at 2 kHz :) [Ouch, actually, writing to VDC is probably too slow...]
Almost related bits from VIC 20 world: I used this loader in Hare Basic - it does autostart on both VIC 20 and C-64, and loads&runs either the file "A000" or "C000". As a little bonus, it can be also loaded with ",8" on both machines, but then obviously requires a RUN.
(Inspired by Mike's VIC 20 memory-configuration-independent-autostart code on Denial forum.)
processor 6502
SETLFS equ $ffba
SETNAM equ $ffbd
LOAD equ $ffd5
RESTOR equ $ff8a
CHROUT equ $ffd2
CLRCHN equ $ffcc
SCREEN equ $ffed
; C-64 / VIC 20 Autostart
;
; load"*",8 or load"boot",8 (and run)
; load"*",8,1 or load"boot",8,1 (autostart)
start equ $02a7
org start
incbin "autostart-basic.bin" ; 2024 syspeek(44)*256+peek(43)+21
basic
ldy #bootend-start-1
.1
lda ($2b),y
sta start,y
dey
bne .1
jmp boot
boot
jsr SCREEN ; detect C-64 or VIC 20 by number of rows
cpy #$19
beq .c64
.vic20
jsr $e45b ; restore basic vectors (VIC 20)
lda #$a0
sta start_+2 ; modify start address to $a000
lda #$41
sta filename ; modify filename to "A000"
bne .load
.c64
jsr $e453 ; restore basic vectors (C-64)
.load
ldx #<filename ; set up filename
ldy #>filename
lda #$04
jsr SETNAM
lda #$01 ; set up file
sta $9d
ldx $ba
tay
jsr SETLFS
lda #$00 ; load and execute
jsr LOAD
start_
jmp $c000
filename
dc.b "C000"
bootend
org $0300
dc.w boot
dc.w boot
|
| |
oziphantom
Registered: Oct 2014 Posts: 490 |
yeah but the VIC-20 and C64 have the same version of BASIC with the same vectors and ROM in the same place. The 128 is not a slightly bigger C64 it's a smaller Amiga.
Putting that code on a 128 will trash
02a2-02ae 674-686 Kernal RAM
02a2-02ae Bank Peek Subroutine
02af-02bd Bank Poke Subroutine
02be-02cc Bank Compare Subroutine
02cd-02e2 JSR to Another Bank
02e3-02fb JMP to Another Bank
02fc-02fd Function Execute Hook [4c78]
which will cause crashes |
| |
chatGPZ
Registered: Dec 2001 Posts: 11391 |
Quote:The 128 is not a slightly bigger C64 it's a smaller Amiga.
It has more in common with a Spectrum than with an Amiga though :D |
| |
Jammer
Registered: Nov 2002 Posts: 1336 |
Amiga is a direct descendent of Atari, deal with it ;) |
| |
MagerValp
Registered: Dec 2001 Posts: 1078 |
Writing a big basic program with branching logic to detect C128 or C64 is easy enough, but I'd prefer something compact even if a bit hacky. The best I could come up with on my lunch break is SYS(PEEK(57532)-219)*256+30.
Sample project here: https://github.com/MagerValp/C128-C64-PIBS |
| |
oziphantom
Registered: Oct 2014 Posts: 490 |
SYS(PEEK(46)*256+30) would do it I think. |
| |
MagerValp
Registered: Dec 2001 Posts: 1078 |
Quoting oziphantomSYS(PEEK(46)*256+30) would do it I think.
No that points to the end of the loaded program on the C64, which unless it's really short doesn't give you $08. |
| |
Martin Piper
Registered: Nov 2007 Posts: 726 |
Quote: yeah but the VIC-20 and C64 have the same version of BASIC with the same vectors and ROM in the same place. The 128 is not a slightly bigger C64 it's a smaller Amiga.
Putting that code on a 128 will trash
02a2-02ae 674-686 Kernal RAM
02a2-02ae Bank Peek Subroutine
02af-02bd Bank Poke Subroutine
02be-02cc Bank Compare Subroutine
02cd-02e2 JSR to Another Bank
02e3-02fb JMP to Another Bank
02fc-02fd Function Execute Hook [4c78]
which will cause crashes
43/44 on the C128 are also not the start of basic. |
| |
zzarko
Registered: Feb 2003 Posts: 77 |
CBM FileBrowser v1.6 implements a basic stub that checks if the machine is VIC-20, C64, C128, C64DTV or Plus/4 and loads binary for recognized one:
https://github.com/0cjs/cbm-filebrowser/blob/master/sources/fb... |
| |
chatGPZ
Registered: Dec 2001 Posts: 11391 |
A stub loader is easy to do - the challenge is to make it a single self contained binary :) |
Previous - 1 | 2 | 3 | 4 | 5 - Next |