You are not logged in -
nap
CSDb User Forums
Forums
>
C64 Coding
>
Start Basic Programm with easyflash
2020-03-25
01:00
lA-sTYLe
Registered: Sep 2003
Posts: 63
Start Basic Programm with easyflash
I tried to put some Basic Coode into an Easyflash cartridge but after transfering the Basic Prg back to $0801 i it wont start.
To call it i am using the following code at $1000 which is an unnew that works just fine when i load it to C64, reset and execute. But when called from ef crt it crashes.
My basic File ends at 0cxx so overlapping isnt the Problem here.
;acme source start
lda #<2049
sta $fc
lda #>2049
sta $fd ;$fc refers to the standard start of BASIC
ldy #$04 ;scan BASIC program area from the first byte
;of the first line content (skip the two bytes with the
;address of the second BASIC line, and skip the
;two bytes with the first line number).
loop1 lda ($fc), y
beq exit_loop1 ;if a zero has been found, exit loop1
iny ;else, scan another byte
jmp loop1
exit_loop1 iny ;a zero has been found - end of first program line
;inc y so that we reach the address of second program line
;(before inc y, we are on the last byte of the first basic line)
clc
tya
adc $fc
sta $fc ;$fc = y + $fc
skip1 lda $fc
sta 2049
lda $fd
sta 2050 ;restore the second line address that has been cleared by NEW
ldy #$00 ;y will stay zero, we don't need it
scan_loop lda ($fc), y ;scans the remaining part of BASIC program
beq zero_found ;if it founds a zero, it jumps to "zero_found"
lda #$00
sta zero_flag ;if a value different than 0 has been found, zero_flag
;counter must be reset
return inc $fc ;prepare to scan next byte
lda $fc
bne scan_loop ;if low byte of address is not zero, no need to increment
;the high byte of address
inc $fd
jmp scan_loop ;we've crossed a memory page, so increment high byte of address
zero_found inc zero_flag ;we've found a zero, so zero_flag must be incremented by 1
lda zero_flag
cmp #3 ;three consecutive zeroes have been found?
;three zeroes = one byte (end of last line) + two bytes (end of program)
bne return ;if not, keep on scanning the program
inc $fc ;three zeroes have been reached, so we've reached program end
;now we need to store the final address + one on pointers
;on 45, 47, and 49 decimal
lda $fc
bne skip2 ;increment low byte of address by one, then check if it is 0
inc $fd ;low byte has wrapped to 0, so we need to increment the high byte
;of address
skip2 lda $fc ;set pointers to required value, according to where the program ends
sta 45
sta 47
sta 49
lda $fd
sta 46
sta 48
sta 50
JSR $A659
JSR $A533 ; Rechain Lines
JMP $A7AE ; Basic Warm Start rts ;we are done
;acme source end
Anybody who already did this and probably may help out ?
2020-03-25
10:42
chatGPZ
Registered: Dec 2001
Posts: 11386
how does your cartridge startup code look like? to make basic work, you must do all the init stuff the kernal would normally do, just setting up a couple zp things wont work :)
2020-03-25
11:37
lA-sTYLe
Registered: Sep 2003
Posts: 63
Init routine before calling transfered data from ef to c64mem is
sei
lda #$37
sta $01
LDX #$FF
TXS
CLD
sei
stx $d016
jsr $fda3 ;Prepare IRQ
jsr $fd50 ;Init memory. Rewrite this routine to speed up boot process.
jsr $fd15 ;Init I/O
jsr $ff5b ;Init video
cli
;Transfer filedata
LDX #$00
ld1 LDA loader,X
STA $0340,X
LDA loader+$ff,X
STA $0340+$ff,X
INX
BNE ld1
JMP $0340
loader SEI
LDA #$37
STA $01
LDA #$00
STA $D011 ;VIC Control Register 1
LDA #$07
STA $DE02
LDA #$01 ; sel Bank 1
STA $DE00
LDY #$40
page1 LDX #$00
load1 LDA $8000,X
stor1 STA $07ff,X
INX
BNE load1
INC $035a
INC $035d
DEY
BNE page1
LDA #$02 ; Bank 2
STA $DE00
LDY #$40
page2 LDX #$00
load2 LDA $8000,X
stor2 STA $47ff,X
INX
BNE load2
INC $035a+27
INC $035d+27
DEY
BNE page2
LDA #$04
STA $DE02
CLI
jmp $1000
2020-03-25
11:43
Krill
Registered: Apr 2002
Posts: 2980
http://unusedino.de/ec64/technical/aay/c64/rome394.htm
might have a few hints.
2020-03-25
11:47
tlr
Registered: Sep 2003
Posts: 1790
I think what you are missing is the BASIC init code:
JSR $E453 ; Init BASIC RAM vectors JSR $E3BF ; Main BASIC RAM Init routine
and possibly setting the stack pointer to $FB.
There's some stuff here:
https://codebase64.org/doku.php?id=base:assembling_your_own_car..
You can also look at the boot code I wrote for the 1541U2:
https://github.com/GideonZ/1541ultimate/blob/master/software/65..
that code is interleaved with a lot of handling stuff but you can get the essence of it.
Refresh
Subscribe to this thread:
You need to be logged in to post in the forum.
Search the forum:
Search
All forums
C64 Coding
C64 Composing
C64 Pixeling
C64 Productions
CSDb Bug Reports
CSDb Development
CSDb Discussions
CSDb Entries
CSDb Feedback
CSDb Info
CSDb moderators
CSDb Questions
Messages to moderators
Requests
for
in
Writer & text
Text
Writer
All times are CET.
Search CSDb
All
Releases
Groups
Sceners
Events
BBS
SIDs
-------
Forum
Comments
Advanced
Users Online
Quetzal/Chrome
Guests online: 63
Top Demos
1
Next Level
(9.7)
2
13:37
(9.7)
3
Mojo
(9.7)
4
Coma Light 13
(9.6)
5
Edge of Disgrace
(9.6)
6
What Is The Matrix 2
(9.6)
7
The Demo Coder
(9.6)
8
Uncensored
(9.6)
9
Comaland 100%
(9.6)
10
Wonderland XIV
(9.6)
Top onefile Demos
1
Layers
(9.6)
2
No Listen
(9.6)
3
Party Elk 2
(9.6)
4
Cubic Dream
(9.6)
5
Copper Booze
(9.6)
6
Rainbow Connection
(9.5)
7
Dawnfall V1.1
(9.5)
8
Onscreen 5k
(9.5)
9
Morph
(9.5)
10
Libertongo
(9.5)
Top Groups
1
Performers
(9.3)
2
Booze Design
(9.3)
3
Oxyron
(9.3)
4
Triad
(9.3)
5
Censor Design
(9.3)
Top Coders
1
Axis
(9.8)
2
Graham
(9.8)
3
Lft
(9.8)
4
Crossbow
(9.8)
5
HCL
(9.8)
Home
-
Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.081 sec.