Rom Copy Routine
Rom Copy Routine
von Heaven_tqa » Do 1. Nov 2007, 19:09
also ich probiere seit einiger Zeit das ROM ins darunterliegende RAM zu kopieren, doch irgendwie klappt das nicht... der Atari crashed und atari800win springt in den Monitor. Kann mir jemand kurz helfen?
Danke!
- Code: Alles auswählen
witch_off_os_rom: lda $d301
sta save_d301
sei ;stop interrups
lda #0
sta $d40e
ldy #16 ;$1000
switch_off1 ldx #0
switch_off2 lda #$ff ;switch ROM on
sta $d301
nop
switch_off20 lda $c000,x
sta temp
lda #$fe ;switch ROM off
sta $d301
nop
lda temp
sta $c000,x
inx
bne switch_off2
inc switch_off20+2
dey
bpl switch_off1
ldy #32 ;$2000
switch_off3 ldx #0
switch_off4 lda #$ff ;switch ROM on
sta $d301
nop
switch_off40 lda $e000,x
sta temp
lda #$fe ;switch ROM off
sta $d301
nop
lda temp
sta $e000,x
inx
bne switch_off4
inc switch_off40+2
dey
bpl switch_off3
lda #$fe ;switch off OS
sta $d301
cli
lda #$40
sta $d40e
rts
von HiassofT » Do 1. Nov 2007, 19:18
Hi!
Ich habe mir Deinen Code jetzt nicht genauer angesehen, aber hier ist der Code den ich für den Highspeed SIO Patch verwende. Einzige Voraussetzung: ROM muß zu Beginn eingeschaltet sein.
so long,
Hias
- Code: Alles auswählen
ROMRAM SEI
LDY #0
STY $D400
STY $D40E
STY TMPVEC
LDA #$C0
STA TMPVEC+1
ROMMV LDA (TMPVEC),Y
DEC $D301
STA (TMPVEC),Y
INC $D301
INY
BNE ROMMV
INC TMPVEC+1
LDA TMPVEC+1
BEQ ROMOK
CMP #$D0
BNE ROMMV
LDA #$D8
STA TMPVEC+1
BNE ROMMV
ROMOK DEC $D301
LDA #$40
STA $D40E
CLI
RTS
von HiassofT » Do 1. Nov 2007, 19:20
Ah, jetzt habe ich glaube ich auch den Fehler in Deinem Code entdeckt: Du musst auch beim STA $C000,X bzw. STA $E000,X die Page-Adresse erhöhen.
so long,
Hias
von Heaven_tqa » Do 1. Nov 2007, 21:07
ah.......

ich frei...was man so nach 6 stunden programmieren nicht mehr sieht...

Danke!
von robbifan » So 4. Nov 2007, 19:03
welchen sinn macht es , das rom runter zu legen?
mfg
von cas » So 4. Nov 2007, 19:48
robbifan hat geschrieben:welchen sinn macht es , das rom runter zu legen?
mfg
Wenn man ds ROM in das darunterliegende RAM kopiert, dann kan man am Betriebssystem Änderungen vornehmen (was man ja im ROM nicht machen kann). Da RAM und ROM im gleichen Speicherbereich liegen, kann das ROM dan ausgeschaltet bleiben und der Atari läuft mit einem geänderten Betriebssystem im ROM.
Das geht, solange keine andere Software das RAM unter dem ROM benutzen möchte. Beispiele für Programme die dies tun sind Turbo-Basic XL, Bibo-DOS, Sparta-DOS ...
von Heaven_tqa » Do 15. Nov 2007, 00:08
ich mache das eher um schritt für schritt das OS komplett wegzubekommen und dadurch den vollen "56k"-ram speicher zu nutzen.
dazu muss ich eine kleine interrupt routine für die NMIs wie DLI, VBL und eben IRQs, wie tastaturabfrage installieren... und daher erstmal die einfache variante, dass OS ins RAM zu kopieren und dadurch langsam die anderen routinen wie PRINT und VBL ersetzen... so kann nichts zerschiessen...

Carsten, hast du eine OS unabhängige INPUT oder GET_KEY routine in assembler? klein und kompakt?
von HiassofT » Do 15. Nov 2007, 15:19
Heaven_tqa hat geschrieben:Carsten, hast du eine OS unabhängige INPUT oder GET_KEY routine in assembler? klein und kompakt?
Ich bin zwar nicht der Carsten, kann Dir da aber trotzdem ein klein wenig helfen :-)
Lade Dir den TurboFreezer Source Code (letzte Version:
http://www.horus.com/~hias/freezer/software/freezer-software-3.02pre5.zip) herunter und schaue in das File "src/freezer/GETKEY.M65". Das ist eine recht einfache GetKey Routine, die braucht nur einen Zähler, der bei jedem VBI um 1 hochgezählt wird (RTCLOCK+2). Achja: "KBCAPS" sollte ganz zu Beginn auf 0 gesetzt werden, das speichert den Zustand von Caps/Invers.
Eine Input-Routine gibt's auch, ist aber etwas komplizierter. Schau dazu ins File "src/freezer/MONITOR.M65". Ab "DEBU3" ist die Input-Routine, allerdings mit einer fixen Adresse für die Eingabezeile (CMDLINE). Sollte aber relativ einfach zu ändern sein.
so long,
Hias
von Heaven_tqa » Fr 16. Nov 2007, 00:03
Danke Hiass. So klein ist ja die Get_key dann doch nicht...

von cas » Fr 16. Nov 2007, 11:38
Heaven_tqa hat geschrieben:Carsten, hast du eine OS unabhängige INPUT oder GET_KEY routine in assembler? klein und kompakt?
Nichts was besser ist als die Routinen von HIAS
Kurz geht es nur, wenn die Keyboard Interrupt Routine das OS wieder einblendet, den Tastendruck entgegennimmt, und dann wieder ausblendet. Ist das eine Option?
Carsten
von Heaven_tqa » Sa 17. Nov 2007, 12:14
auch schon daran gedacht und erstmal gescheitert... dazu müsste ich genau wissen, welchen bereich die tastatur routine im rom verbratet...nicht, dass das defragtmentiert ist...
von Heaven_tqa » Di 20. Nov 2007, 20:42
so...und wenn jetzt noch jemand eine nette ascii2screen routine hat?

d.h. aus dem ascii zeichen direkt die screen version...wobei, eigentlich muss ich ja nur die tabelle ändern....oder?