| |
H.O Account closed
Registered: Oct 2002 Posts: 70 |
cleaning up between demoparts
One of favorite projects (or maybe not) -- I am currently trying to integrate some code made by others (basically, I am planning to do a release of some unreleased demo parts)
Problem is, one of the demo parts seems to be assuming a helluva lot of the c64. If I link the parts together, and do a soft reset I can start the last part with no problems.
But, if I have run some other demo part first, this part will just freeze up.
But, since I dont want anyone to have to use soft reset inside a demo, I want to clean up so that the final part works fine. Currently I am using the following calls:
sei
jsr $ff5b ; Initialize screen editor
jsr $fda3 ; Initialise I/O
jsr $fd15 ; Restore Kernal Vectors
lda #$00
ldx #$00
cleanme
sta $d800,x
inx
cpx #$28
bne cleanme
cli
Anything else that I can do? I am trying to avoid my worst case scenarios (which are releasing each part as they are as standalone applications, or rewriting most of the code that I didnt do; none af them are very appealing to me)
|
|
| |
Monte Carlos
Registered: Jun 2004 Posts: 359 |
First check, which $01 value is assumed by the foreign (F) part.
Than make sure, that the init routine of F doesnt disturb the
irq of the part before, else write an intermediate irq routine.
Some codes initialize the irq and clear $d019 directly. Thats wrong, because while initiating, an irq request may occure.
This one is waited to be fulfilled, until the next cli.
If you start such a part, if there is tricky raster timing in it, it works sometimes and sometimes not, dependent on the framepos when the part is started.
Make sure, that the cli after initialisation of this part is executed always at the same time relative to the first irq.
Or place the lsr $d019 directly before the cli.
If the part disables nmi by $dc0d make sure, it does an bit $dc0d additionally, because else exacly one nmi may be executed after.
|
| |
TDJ
Registered: Dec 2001 Posts: 1879 |
By the end of my 'active' coding career (circa 1994) I had it all figured out, knew exactly what to set and which routines to call to clean the system. The demos I released later on were oneparters, so there was no problem at all.
Last year WVL/Xenon, Jayce/Focus & me were working on the WWE demo 'Primal Scar', which is a one-filer with three parts, thus there was a need for a clean exit.
We failed. For some reason 3 of the last few remaining Dutch coders, including one who's amongst the absolute best in the world, couldn't get the job done. Hence we competed with a 'preview' version, and Jayce had to spend some extra time at home, linking it all together.
We suck. What's your excuse? ;)
|
| |
Tch Account closed
Registered: Sep 2004 Posts: 512 |
This might help.
I had the same problem sometimes..
Before starting everything..
JSR $FF81
JSR $FF84
JSR $FF8A
Hope it´s any good.. |
| |
Vai
Registered: Mar 2002 Posts: 50 |
Quote: This might help.
I had the same problem sometimes..
Before starting everything..
JSR $FF81
JSR $FF84
JSR $FF8A
Hope it´s any good..
If I'm correct those are the same as jsr $ff5b, jsr $fda3 & jsr $fd15 ... only they are direct. |
| |
Tch Account closed
Registered: Sep 2004 Posts: 512 |
Quote: If I'm correct those are the same as jsr $ff5b, jsr $fda3 & jsr $fd15 ... only they are direct.
Haha,you are absolutely right. 8)
Stupid me... |
| |
V-12
Registered: Nov 2003 Posts: 206 |
are you cleaning also screen and colours ? you can turn off the screen ($d011) or just use kernal routines. |
| |
tasche Account closed
Registered: Apr 2004 Posts: 12 |
remember the Kernel-Bug in $fd15 !!!
;----------------------------------------------
FD15 A2 30 LDX #$30 ; low FD30
FD17 A0 FD LDY #$FD ; high FD30
FD19 18 CLC
FD1A 86 C3 STX $C3
FD1C 84 C4 STY $C4
FD1E A0 1F LDY #$1F
FD20 B9 14 03 LDA $0314,Y
FD23 B0 02 BCS $FD27
FD25 B1 C3 LDA ($C3),Y
FD27 91 C3 STA ($C3),Y ; this writes into RAM, which
; can kill placed Data !!!
FD29 99 14 03 STA $0314,Y
FD2C 88 DEY
FD2D 10 F1 BPL $FD20
FD2F 60 RTS
;---------------------------------------------- |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
when will all pc headed dude finally learn that:
kernel != kernal
anyways, the code clears the C bit, and I dont see instruction that changes C until the bcs takes place.
|
| |
tasche Account closed
Registered: Apr 2004 Posts: 12 |
@oswald:
till it could have been a spelling mistake??
i might be wrong, but kernal is the name of the c64 kernel, coz i learnt in former days, that in computer engineering, the kernel is the core of an operating system, or am i wrong?
btw: this routine is 100% writing into the ram under the rom. regardless if c is set or not. |
| |
Honesty
Registered: Jan 2003 Posts: 121 |
Hm i tried it to be honest...
I filled area from f000 to ffff with 0 and then with ff
and after switching of the rom there is only ff...
|
... 16 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 | 3 - Next |